【问题标题】:Accessing a session in jQuery在 jQuery 中访问会话
【发布时间】:2012-11-23 19:32:40
【问题描述】:

我可以在 jQuery 中设置会话变量吗?

我需要在会话中存储一些来自 jQuery 的数据,并且我还想通过 jQuery 检索这些数据。

有没有类似的

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

【问题讨论】:

  • 您正在考虑的会话听起来是服务器会话,通常使用 PHP 中的 $_SESSION 之类的东西访问,并且访问它的唯一方法是在服务器端,但您可以使用 ajax 来设置和获取值。现代浏览器中还有一个内置的会话存储,称为 sessionStorage,它的工作原理与 localStorage 一样,只是在会话结束时它会被清空。
  • 服务器会话可能包含高度敏感的数据。不要盲目的在客户端发布其内容!什么要求可以证明从客户端访问会话变量是合理的?我很确定有更好的方法。你能描述一下你的实际需求吗?
  • @Steve B:正如你刚才所说,它可以包含。基本上它只是一个诚实的容器,你可以在里面存放任何你想要的东西。这种方法的适用性是另一种情况。

标签: jquery session


【解决方案1】:

会话可在服务器端访问。但是,如果您愿意,您可以通过编写一个函数来访问您的会话,例如调用您的服务器的 ajax 请求并获取您想要的任何内容。

编辑:

我将使用 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 序列化,因为这是我在将对象传入和传出服务器时更喜欢的方法。其他事情 - jQuery done 事件只会在成功时触发。如果服务器端出现一些错误(例如:未捕获的异常),请求返回 http 500 并且事件不会被调用。

【讨论】:

  • 您好,感谢您的回答。您能给我提供一个在 Jquery 中使用 ajax 调用访问会话的示例吗?
【解决方案2】:

如果您正在考虑使用 jQuery 处理客户端会话,则需要一个插件。

我能想到的一个是jQuery Session Plugin

【讨论】:

  • 嗨,我试过了。可以存储和检索字符串,但不能存储从 ajax 调用返回的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2013-11-19
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
相关资源
最近更新 更多