今天做了个小测试...我在ASP.NET页面后太累的page_Load 方法里加上一句话 :Response.Write(Session.SessionID);然后用IE访问这个页面,HTTP请求报文那里没有带上Cookie,并且你刷新页面时候,页面上write出来的sessionID随着你的刷新会改变。。
但是我又做了另外一个小测试,在page_Load方法里面加上Response.Write(Session.SessionID);Session["UserName"]="Hello";退出IE后重新打开IE,结果HTTP请求报文那里会带上cookie 还有即使你刷新页面那个sessionID是不会变化的。。这里我有几大疑问,恳请大神们帮我解答下,上网找了下没答案:
1、只要服务器配置了使用session,那么是不是对于每一个客户浏览器第一次访问服务器网站的时候,服务器都为其分配一个固定的sessionID,并储存在进程那里呢??但是如果这样,为什么我刷新后,sessionID会改变呢?
2、是不是服务器对次浏览器的session属性做了修改的时候,才为浏览器创建一个固定的sessionID 储存在IIS进程中,然后返回给浏览器呢?即服务器对session作了修改,才为这个浏览器客户创建一个固定的session 。session

解决方案 »

  1.   

    服务器的 每个请求 都会产生一个独立的SessionID,在IIS中记录,保证不重复
      

  2.   

    当session里面没有数据的时候是不会把sessionID放到cookie里面的,除非在global文件里面显示声明。
      

  3.   

    那么原理是不是这样?客户端每次访问服务器,服务器就为其分配一个sessionID,假若不对session做修改,那么服务器不会返回一个url或者cookie。那么客户端在不关闭浏览器,再刷新就不会携带一个cookie过来。我看了微软的说法,我的理解是,假若不携带cookie过来,那么就将原来那个sessionID视为过期的session,将其回收,并重新分配一个新的sessionID。假若服务器对session修改了,那么就会返回一个cookie或者url给客户端,那么客户端下一次HTTP请问过来的时候,就会携带一个cookie或者url那里加上sessionID,那么服务器就认为此session为活动的不将其回收,是这样么??