在会话中存储用户ID

时间:2011-02-15 21:45:13

标签: asp.net

当用户登录时,我想将他的userID存储在

的会话中
HttpContext.Current.Session["UserID"] = 2354; (this is just a hard-coded example)

然后,当我运行页面方法时,如果我这样做

var test = HttpContext.Current.Session["UserID"];

变量测试会保存我登录时存储的值吗?

如果这是一种正确的方法,当我从页面方法接收呼叫时,如何访问会话?我想在页面方法中放置test = ...行,以确定请求来自哪个用户。

感谢。

5 个答案:

答案 0 :(得分:3)

正如已经回答的那样,是的 - 它应该没问题,但是如果你在使用这种方法[WebMethod]调用服务之前太长时间坐在页面上它就会失败。在这种情况下,最佳做法是检查会话并根据需要重建。任何其他身份验证都是如此,以确保它们不会变得不同步或过期。

[WebMethod(EnableSession = true)]

    HttpContext context = HttpContext.Current;
    if (context.Session["UserID"] == null) {
      Utilites.PopulateSessionVars(context.Request.ClientCertificate, context.Request.ServerVariables["REMOTE_ADDR"]);
    }
    String userId = context.Session["UserID"].ToString();

(其中Utilities.PopulateSessionVars是一种从您用于登录的任何内容重建会话数据的方法...在我的情况下是PKI证书)

答案 1 :(得分:0)

是的,但建议您在test变量分配后直接进行测试,以确保在尝试使用之前正确设置了UserID。

修改

你可以尝试:

var test;

if (HttpContext.Current.Session["UserID"] != null)
{
    test = HttpContext.Current.Session["UserID"];
}

答案 2 :(得分:0)

是的,这应该有效。但是,会话和表单身份验证超时位于不同的计时器上,并且具有不同的默认超时,因此如果您使用表单身份验证,则无法保证会话中的值在用户通过身份验证的时间段内可用。

答案 3 :(得分:0)

这应该这样做

//Note: this code hasn't been tested.  Correct me if I'm wrong 

//To Set:
if (Session["UserId"] == null)
   Session["UserId"] = "12345";

//To Get it:
if (Session["UserId"]  != null)
   MyObject.Id = Session["UsedId"].ToString();  

答案 4 :(得分:0)

Global.asax在应用程序级别运行。您希望用户会话是一个不同的http上下文。在主页/默认登录页面中初始化会话。