我正在使用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"]),以便可以在元素中进行设置。请提出建议。

最佳答案

会话值存储在服务器上,无法使用客户端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);
});

10-07 19:53
查看更多