session存储和机制

来源:互联网 发布:阿迪达斯淘宝推荐店铺 编辑:程序博客网 时间:2024/06/06 18:30

         当浏览器第一次请求时,服务器创建一个session对象,同时生成一个sessionId,并在此次响应中将sessionId 以响应报文的方式些回客户端浏览器内存或以重写url方式送回客户端,来保持整个会话。关闭此浏览器窗口,其内存中的sessionId也就随之销毁。重新请求时,会重新生成一个sessionId给客户端浏览器,并存在浏览内存中。

         通过反编译我们可以看到Session就是(HttpSessionState)this.Items["AspSession"];,Items是privateHashtable _items;于是可以看到我们所使用的Seesion[" key "]=value就是散列表(hash table,也叫哈希表)中的一对数组,也就是说,它通过把关键码(key)值映射(f(key)散列算法)到表中一个位置来存储value。当有多个关键字key时,根据散列函数f(key)和处理冲突的方法,哈希表将一组关键字(key)映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中映射的“象”, 作为这条记录在表中的存储位置。我们可以根据不同的key值,获取该映射“象”的值value

SessionId 值是使用保证唯一性和随机性的算法生成的,其中保证唯一性的目的是确保会话不冲突,保证随机性的目的是确保怀有恶意的用户不能使用新的 SessionId 来计算现有会话的 SessionID。sessionId的值就是上面说的哈希表存储的位置,客户端浏览器可以在会话时,根据服务器发送到客户端的sessionId找到session存储的位置,再通过session[" key "在哈希表中找到对应地址的值。

0 0
原创粉丝点击