SessionID Cookie 摘抄

来源:互联网 发布:stc单片机选型 编辑:程序博客网 时间:2024/05/21 05:41

 对于一个传统的客户机/服务器解决方案,例如一个基于客户机的应用程序对一个基于服务器的数据库引擎进行访问的系统,每个客户端建立了一个与服务器和数据库应用程序的连接。这种连接通常是通过验证用户的方法来建立的


当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串

会话ID是一种唯一标识当前访问服务器的客户的只读值。在经典的ASP环境下,会话ID是按照顺序方式被分配的,也就是说,会话ID 706616433之后跟着会话 ID 706616434等等。传统的ASP会话ID以加密的、非持久存在的cookie形式保存在客户机上。例如,会话ID 706616434就可能作为cookie ASPSESSIONIDGQQGQGCS=JHMBOBKCBINEHLPKJHOPABBE保存在客户机上。

 

事实上,当浏览器向服务器发送 Cookie 信息时,浏览器并未将过期信息包括在内。您可以读取 Expires 属性,但总是返回为零的日期/时间值。


当用户请求一个ASP网页时,IIS通过实例化asp.dll(用来实现ASP)创建一个环境(如第1章所述)。将该页面解释为服务器端脚本,相应的脚本引擎的实例用来执行该脚本。
实例化的asp.dll初如事件启动一个ASP应用程序,创建一个Application对象。然后,为这个用户启动一个会话,并创建单独的Session 对象。当更多的会话启动时,这个Application对象保留在作用域中(即已经实例化和可用)。一旦最后保持活动的会话结束,该应用程序就结束,并取消相应的Application对象。

 

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
  如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
  存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

 


就session的实现而言,好像是这样的:  
  (1)当有Session启动时,服务器生成一个威一值,称为Session   ID(好像是通过取进程ID的方式取得的)。  
  (2)然后,服务器开辟一块内存,对应于该Session   ID。  
  (3)服务器再将该Session   ID写入浏览器的cookie。  
  (4)服务气内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放改内存块。  
   
  (5)当浏览器连入IIS时并请求的ASP内用到Session时,IIS就读浏览器Cookie中的Session   ID。  
  (6)然后,服务检查该Session   ID所对应的内存是否有效。  
  (7)如果有效,就读出内存中的值。  
  (8)如果无效,就建立新的Session。  
   
  注意:  
  (1)在大浏览量的网站,Session并不保险,我们过去的网站就经常碰到存在Session中得值不正确(可能出现重复的Session   ID)。  
  (2)Session   ID不能从硬盘上的Cookie文件获得,如果想在客户端获知自己的Session   ID,只能通过JavaScript来读取(怎么干就自己想办法了)。

 

 

 

 

 

 

原创粉丝点击