我正在使用c#和jQuery。
我在下面的代码中使用C#代码设置会话变量。
if (!string.IsNullOrEmpty(results))
{
string[] array = results.Split(',');
string firstName = array[0];
string lastName = array[1];
string activeCardNo = array[2];
string memberShipTier = array[3];
string accessToken = array[4];
Session["skyFirstName"] = firstName.ToString();
Session["skyLastName"] = lastName.ToString();
Session["skyActiveCardNo"] = activeCardNo.ToString();
Session["skyMemberShipTier"] = memberShipTier.ToString();
Session["boolSignOn"] = "true";
Response.Redirect(fromPage);
Response.End();
}
现在我想使用jQuery读取这些值(Session["skyFirstName"]
),以便我可以在我的元素中设置。请建议。
答案 0 :(得分:6)
会话值存储在服务器上,无法使用客户端javascript读取它们。实现此目的的一种方法是公开一些服务器端脚本或通用处理程序,它将返回给定键的相应会话值,然后使用jQuery向此处理程序发送AJAX请求并读取该值。您应该知道,通过这样做,用户可以读取他的所有会话值。请注意,从安全角度来看,暴露用于编写会话值的相同脚本可能是灾难性的。
以下是一个例子:
public class ReadSession : IHttpHandler, IReadOnlySessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.Write(new JavaScriptSerializer().Serialize(new
{
Key = context.Request["key"],
Value = context.Session[context.Request["key"]]
}));
}
public bool IsReusable
{
get { return true; }
}
}
然后查询它:
$.getJSON('/ReadSession.ashx', { key: 'skyFirstName' }, function(result) {
alert(result.Value);
});
答案 1 :(得分:1)
jquery在客户端上运行,客户端无法直接访问服务器端会话值。一个解决方案是提供一个返回这些值并使用web服务的web服务,另一个解决方案是将页面响应中的值包含为JSON(例如)并在客户端上访问它们。
答案 2 :(得分:1)
您无法使用javascript访问会话变量,因为会话变量是服务器端而不是客户端。
已经提到的一个解决方法是使用ajax来允许javascript与服务器端通信。这很好,但可能过于复杂,无法满足您的需求。
另一个更简单的解决方案是将会话变量输出到隐藏的输入字段中,或者作为脚本标记中的javascript变量输出,然后您可以使用javascript访问它们。
答案 3 :(得分:0)
jQuery是javascript,所以为了让这些变量可用,你需要打印出html代码(至少一个脚本标签),你可以将读出的会话变量从C#设置为javascript变量。
另一种方法是使用ajax请求从服务器脚本中获取会话变量。