我可以在jQuery中设置会话变量吗?在jQuery中访问会话
我需要在jQuery会话中存储一些数据,我也想通过jQuery检索数据。
有什么样
$.getSession.set("var","value");
我可以在jQuery中设置会话变量吗?在jQuery中访问会话
我需要在jQuery会话中存储一些数据,我也想通过jQuery检索数据。
有什么样
$.getSession.set("var","value");
会话在服务器端是可访问的。但是,如果你愿意,你可以通过编写一个函数来访问你的会话,例如调用一个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请求:
您可以编写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);
或异步版本,在完成时它调用回调:
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并且不会调用事件。
如果您正在寻找在处理客户端会话使用jQuery,你会需要一个插件。
我能想到的一个是jQuery Session Plugin。
嗨,我试过这个。 存储和Retriving Strings可以,但不能存储从Ajax调用返回的对象。 – pst
您正在考虑的会话听起来像是服务器会话,通常在PHP中使用$ _SESSION进行访问,并且唯一的方法是在服务器端访问它,但您可以使用ajax来设置和获取值。在现代浏览器中还有一个名为sessionStorage的内置会话存储,并且像localStorage一样工作,只有当会话结束时它才会被清空。 – adeneo
服务器会话**可以包含高度敏感的数据**。不要盲目地在客户端发布其内容!什么要求可以证明从客户端访问会话变量?我很确定有更好的方法。你能描述一下你的实际需求吗? –
@Steve B:就像你刚刚说的那样,它**可以包含**。基本上它只是一个诚实的容器,你可以存储任何你想要的东西。这种方法的适用性是另一种情况。 – jwaliszko