日期:2014-05-17  浏览次数:20360 次

Sessionid的变与不变,.net的意图是什么?
首先得承认这是一个蛋痛的标题,只为吸引眼球。。。

不好意思了。。。

代码非常简单,如下
C# code

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

    protected void Button1_Click(object sender, EventArgs e)
    {
        Session["userName"] = "qingyun1029";
    }



前台就一个button按钮,当页面加载完成后,我尝试着做如下事情。

1、不停的刷新页面。

2、不停的点击button。

然后会发现做第一件时间的时候,sessionid不停的改变,做第二件事情的时候sessionid停止了改变,这是为什么呢???



------解决方案--------------------
你开始不停的刷新的时候压根就没用去用session,所以服务器认为这个会话来源不同的用户,当你使用了session的时候,服务器会向客户端发送一个sessionid作为标识,不信你可以到客户端看看,在没用session的时候,cookies中是不存在sessionid的.......
------解决方案--------------------
1和2,我试了下,SessionID都不变。
------解决方案--------------------
原因是这样的
Session对象如果没有存储数据,是不会在服务器端保存的,也就是说每次都会是一个新的值,只有使用了Session对象,才进行保存

MSDN:

使用基于 Cookie 的会话状态时,只有使用 Session 对象后,ASP.NET 才能分配会话数据存储。 因此,在访问会话对象之前,会为每个页请求生成一个新的会话 ID。 如果您的应用程序要求整个会话使用一个静态会话 ID,则可以实现应用程序的 Global.asax 文件中的 Session_Start 方法,并将数据存储在 Session 对象中以修复会话 ID,或者可以在应用程序的其他部分使用代码将数据显式存储在 Session 对象中。
------解决方案--------------------
探讨

1和2,我试了下,SessionID都不变。