session存储和机制
2014-05-03 10:07
225 查看
当浏览器第一次请求时,服务器创建一个session对象,同时生成一个sessionId,并在此次响应中将sessionId 以响应报文的方式些回客户端浏览器内存或以重写url方式送回客户端,来保持整个会话。关闭此浏览器窗口,其内存中的sessionId也就随之销毁。重新请求时,会重新生成一个sessionId给客户端浏览器,并存在浏览内存中。
通过反编译我们可以看到Session就是(HttpSessionState)
this.Items["AspSession"];,Items是private
Hashtable _items;于是可以看到我们所使用的Seesion[" key
"]=value就是散列表(hash table,也叫哈希表)中的一对数组,也就是说,它通过把关键码(key)值映射(f(key)散列算法)到表中一个位置来存储value。当有多个关键字key时,根据散列函数f(key)和处理冲突的方法,哈希表将一组关键字(key)映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中映射的“象”,
作为这条记录在表中的存储位置。我们可以根据不同的key值,获取该映射“象”的值value。
SessionId 值是使用保证唯一性和随机性的算法生成的,其中保证唯一性的目的是确保会话不冲突,保证随机性的目的是确保怀有恶意的用户不能使用新的 SessionId 来计算现有会话的 SessionID。sessionId的值就是上面说的哈希表存储的位置,客户端浏览器可以在会话时,根据服务器发送到客户端的sessionId找到session存储的位置,再通过session[" key "在哈希表中找到对应地址的值。
通过反编译我们可以看到Session就是(HttpSessionState)
this.Items["AspSession"];,Items是private
Hashtable _items;于是可以看到我们所使用的Seesion[" key
"]=value就是散列表(hash table,也叫哈希表)中的一对数组,也就是说,它通过把关键码(key)值映射(f(key)散列算法)到表中一个位置来存储value。当有多个关键字key时,根据散列函数f(key)和处理冲突的方法,哈希表将一组关键字(key)映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中映射的“象”,
作为这条记录在表中的存储位置。我们可以根据不同的key值,获取该映射“象”的值value。
SessionId 值是使用保证唯一性和随机性的算法生成的,其中保证唯一性的目的是确保会话不冲突,保证随机性的目的是确保怀有恶意的用户不能使用新的 SessionId 来计算现有会话的 SessionID。sessionId的值就是上面说的哈希表存储的位置,客户端浏览器可以在会话时,根据服务器发送到客户端的sessionId找到session存储的位置,再通过session[" key "在哈希表中找到对应地址的值。
相关文章推荐
- 添加第三方类库造成的linker command failed with exit code 1 (use -v to see invocation)的错误调试
- java 数据流DataOutputStream和DataInputstream
- uva10250
- Linux下which、whereis、locate、find 命令的区别
- 【LeetCode】Reverse Integer
- 手机开发之Web App和Native App 谁将是未来
- Zxing图片识别 从相册选二维码图片解析总结
- js:对象的创建(为prototype做铺垫)
- ORACLE 创建表空间、用户、授权
- 并发管理器1——概念
- [c.y.j]spring redis utils
- VS2012 离线帮助文档帮错 指定的用于安装帮助内容的位置无效, 的处理办法
- 使用Visual Studio 2013 从头构建Web表单
- thinkphp 404页面设置
- Ubuntu常用命令大全
- windows系统文件夹下最多有多少个子文件
- c++开源库
- LNMMP架构的实现
- 关于SSH框架中的错误整理,遇到的问题都是前进的台阶
- LeetCode刷题笔录Single Number II