Http Session解惑

1、session问题

为什么如下页面,sessionId会不一样?这让我着实困惑了一段时间。

Code

改变<script>脚本中的代码,增加一个Session存取,再运行看结果,如下:

protected void btnTest_Click(object sender, EventArgs e)
{
    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是否已创建了)

 

 

posted @ 2009-10-22 17:17  FallingAutumn  阅读(283)  评论(0编辑  收藏  举报