• 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的。

     

  • 相关阅读:
    usaco-3.2-butter-passed
    usaco-3.2-msquare-pass
    usaco-3.2-ratios-pass
    usaco-3.2-spin-pass
    usaco-3.2-kimbits-pass
    usaco-3.2-fact4-pass
    usaco-3.1-stamps-pass
    usaco-3.1-contact-pass
    git操作
    spring 用到的设计模式
  • 原文地址:https://www.cnblogs.com/weichao975/p/1785158.html
Copyright © 2020-2023  润新知