2012-11-21 72 views
1

我可以在jQuery中設置會話變量嗎?在jQuery中訪問會話

我需要在jQuery會話中存儲一些數據,我也想通過jQuery檢索數據。

有什麼樣

$.getSession.set("var","value"); 
+1

您正在考慮的會話聽起來像是服務器會話,通常在PHP中使用$ _SESSION進行訪問,並且唯一的方法是在服務器端訪問它,但您可以使用ajax來設置和獲取值。在現代瀏覽器中還有一個名爲sessionStorage的內置會話存儲,並且像localStorage一樣工作,只有當會話結束時它纔會被清空。 – adeneo

+0

服務器會話**可以包含高度敏感的數據**。不要盲目地在客戶端發佈其內容!什麼要求可以證明從客戶端訪問會話變量?我很確定有更好的方法。你能描述一下你的實際需求嗎? –

+0

@Steve B:就像你剛剛說的那樣,它**可以包含**。基本上它只是一個誠實的容器,你可以存儲任何你想要的東西。這種方法的適用性是另一種情況。 – jwaliszko

回答

3

會話在服務器端是可訪問的。但是,如果你願意,你可以通過編寫一個函數來訪問你的會話,例如調用一個jax請求到你的服務器並得到你想要的任何東西。

編輯:

我會告訴你這一點使用ASP.NET MVC框架,因爲我喜歡它了。對於其他框架的想法是一樣的 - 只要問服務器關於會話。

所以,讓它成爲像下面在服務器端 - 簡單的控制器和2個基本動作都寫:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    {    
     // store sample data 
     Session["user"] = new { name = "Anton Chigurh", age = 42 }; 
     return View(); 
    } 

    public JsonResult GetSessionValue(string key) 
    { 
     return Json(Session[key]); 
    }   
} 

首先,你必須通過調用Index行動的東西存儲到會話,例如。接下來,調用GetSessionValue操作來檢索以前存儲的值。除非您的應用程序的禁用會話或瀏覽器中的cookie被禁用,否則您應該獲得正確的價值。

如何獲取值?只需發送Ajax請求:

  1. 您可以編寫JavaScript函數,將做同步的請求 - 這實際上可以凍結你的瀏覽器的一些小的時間(取決於用於一些計算,網絡基礎設施條件等你的服務器時間消耗。):

    function getSessionValue(key) { 
        var result; 
        $.ajax({ 
         url: "/Home/GetSessionValue", 
         type: 'POST', 
         dataType: 'json', 
         data: JSON.stringify({ key: key }), 
         contentType: 'application/json; charset=utf-8', 
         async: false 
        }).done(function (data) { 
         result = data; 
        }); 
        return result; 
    } 
    
    // invoke 
    var user = getSessionValue("user"); 
    console.log(user.name + ": " + user.age); 
    
  2. 或異步版本,在完成時它調用回調:

    function getSessionValue(key, callback) {  
        $.ajax({ 
         url: "/Home/GetSessionValue", 
         type: 'POST', 
         dataType: 'json', 
         data: JSON.stringify({ key: key }), 
         contentType: 'application/json; charset=utf-8',   
        }).done(function (data) { 
         callback(data); 
        }); 
    } 
    
    // invoke 
    getSessionValue("user", function(x) { 
        console.log(x.name + ": " + x.age); 
    }); 
    

順便說一句:我已經使用json seriazlization,因爲它是我喜歡的方法,同時傳遞對象到服務器和從服務器。其他的事情 - jQuery done事件只會在成功時觸發。如果服務器端出現一些錯誤(例如:未捕獲的異常),請求將返回http 500並且不會調用事件。

+0

嗨,謝謝你的答案。你能否給我提供一個在jQuery中使用ajax調用訪問會話的例子? – pst

+0

如你所願 - 更新。 – jwaliszko

1

如果您正在尋找在處理客戶端會話使用jQuery,你會需要一個插件。

我能想到的一個是jQuery Session Plugin

+0

嗨,我試過這個。 存儲和Retriving Strings可以,但不能存儲從Ajax調用返回的對象。 – pst