2012-11-21 51 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