如何使用jQuery读取会话值

时间:2011-01-13 10:18:00

标签: c# asp.net jquery session-variables

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

4 个答案:

答案 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请求从服务器脚本中获取会话变量。