今天Tony提到说我们系统中会利用如下代码来判断用户是否过期。

if (string.IsNullOrEmpty(UserContext.ConnectionSessionId))
{
       LogUIFactory.Current.Debug(HEARTBEAT_DISCONNECTION_LOG_2);
       timeout = true;
}

但是我做实验发现,在page load的时候,打印出来的sessionid是一直在变化的:

 protected void Page_Load(object sender, EventArgs e)
{
     Response.Write(HttpContext.Current.Session.SessionID);
}

上面这代码很好解释,因为http连接是无状态的,所以每次请求过来,sessionid会变化,不足为怪。

但是如果稍微加点料,就不一样了:

protected void Page_Load(object sender, EventArgs e)
{
    Session["tst"] = "222";
    Response.Write(HttpContext.Current.Session.SessionID);
}

上面打印出来的sessionid是一直不会再变化的。

看来如果赋值了之后,session实例会被创建,然后其id就被固定下来了。

 session这东西几年前在用,最近几年写程序,一直在用cookie,都差点忘记了session这点了。今天看到老系统用的仍然是这个,并且发现了其中的这点,感觉收获还挺大的,至少可以再解决框架中的一个技术难点。

posted on 2016-01-25 09:37  程序诗人  阅读(4855)  评论(0编辑  收藏  举报