Http Session解惑
1、session问题
为什么如下页面,sessionId会不一样?这让我着实困惑了一段时间。
改变<script>脚本中的代码,增加一个Session存取,再运行看结果,如下:
{
Session["test"] = "test";
this.Response.Write(Session.SessionID);
}
可知sessionID不变了。以上说明什么?
2、session原理
这里简单描述下,详情可参考:http://www.cnblogs.com/athrun/archive/2008/11/26/1341442.html
session是服务端机制,是为了鉴别客户端的唯一性而建立的,所以session是具有唯一ID的对象。当客户端访问服务器时,服务端检查是否客户端是否已经有session了(参见session客户端存储),有则不创建了并通过此session可唯一确定客户端。如没有,则当请求资源用到了session时(利用session保存信息),服务端会创建session,并将此session发回给客户端。
通过2,我们可知为什么会出现上面的情况了,即:code1中,因为没用到session,所以服务端不会创建session,其sessionID是临时产生的。修改成code2即可。
3、session客户端存储
session的id是在客户端保存的(这样每次服务端才能区分开客户端)。存储有3种方式:cookie、url重写 和 隐藏表单。
一般都用cookie保存,但因cookie可被禁用,所以也可采用url重写,或者 隐藏表单(现在很少使用了)。
这里最要注意的就是session被创建的时机:并非访问服务器就会创建session,而是在有需要时才创建。
我的困惑:
问题1:code1中的sessionId的确产生了,这个仅是一个全局ID还是也创建了session,只是session没有被发到client.如果是后者,又是如何实现的呢? (请参见我的下一篇分析:sessionId在cookie中的诞生时间点)
问题2:如何才能获取到服务端所有的session对象(我想通过此渠道来判断1中的session是否已创建了)