Bright Leopold

i come from the other world,i will go back after the love,the regret,the alive and the dead are over

导航

Cookie 和Session,实现伪Session

在网上东一段西一段的读了一些有关Cookie和Session的文章,自己也总结一下。

1, Cookie :分为2

a)         会话性质的Cookie,存放于浏览器内存中,没有指定过期时间,当关闭浏览器时就失效

b)        存储在客户端硬盘上的Cookie,指定了过期时间,会将其保存在客户端得文件中

2,Session :保存在服务器上的用户数据,可以依赖于Cookie,也可以不依赖于Cookie

       当依赖于Cookie时,客户端和服务端通过互相传递一个SessionID来确定客户端用户的身份

       当不依赖于Cookie时,可以通过Url参数来确实客户端用户的身份,格式为

       http://localhost/UrlReWrite/(S(gzlhzp55q51okj45nx20scvk))/Main.aspx   红色部分即为加密过后的SessionID

其过程如下:

 

 

Session是保存在服务端,默认情况下20分钟会清除对于不活动的session。清除是服务端行为,而不是客户端行为。因此即使关闭了浏览器,Session其实还没过期,一直还保留在服务器上,如果使用URL传递SessionID,当继续使用之前的SessionID访问服务器时,还会找到相应的用户信息。

 

 

CSDN论坛上看到一个问题说如果服务端得Session被禁了,怎么模拟伪Session(一个面试题),如果是我,我会这么解决:

  

1,服务端建一个数据库,里面会有2个表,如下:

1

mySessionID Nvarchar(50)         Unique

CheckInDate   DateTime

 

2

mySessionID  Nvarchar(50)

Key          Nvarchar(50)

Value        Nvarchar(50)

 

1的作用的保持确认用户身份的mySessionID(这个命名是为了区别于系统的SessionID

2 是存储用户相关数据用的

 

1, 当客户端第一次访问服务端时,我会通过计算(至于这么计算的不在这里的考虑范围)生成一个mySessionID 给这个Request,并添加到表1中,然后用户保存在服务端的数据会存在表2

2, Response给客户端时,将mySessionID添加到Cookie里返回给客户端,然后下次客户端Request时就可以通过Cookie将自己的mySessionID传到服务端,得到这个mySessionID后,服务端会更新表1中相应的CheckInDate,并可以进行一系列的操作。

3, 至于mySession的过期处理,可以通过一个线程或者一个window服务来每隔20分钟对表1进行清理(如果表一中CheckInDate和当前时间间隔超过20分钟则清理这个用户的数据)

 

 

大致的流程差不多就是这样,我想这么做应该是能实现模拟Session的。

 

posted on 2010-07-26 12:02  Bright Leopold  阅读(435)  评论(0编辑  收藏  举报