关于Session你需要了解这些
session共享:
1.各种web框架早已考虑到这个问题,比如asp.net,是支持通过配置文件修改session的存储介质为sql server的,所有机器的会话数据都从同一个数据库读,就不会存在不一致的问题;
2.以cookie加密的方式保存在第三方应用端.优点是减轻服务器端的压力,缺点是受到cookie的大小限制,可能占用一定带宽,因为每次请求会在头部附带一定大小的cookie信息,另外这种方式在用户禁止使用cookie的情况下无效.
3.服务器间同步。定时同步各个服务器的session信息,此方法可能有一定延时,用户体验也不是很好。
php支持把会话数据存储到某台memcache服务器,你也可以手工把session文件存放的目录改为nfs网络文件系统,从而实现文件的跨机器共享。
session运行原理:
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
为什么session依赖cookie:
当用户请求servlet,servlet会首先查看第三方应用端cookie中是否有sessionID,如果有则证明是旧的会话,那么就通过cookie将sessionID发送到服务器,服务器就会根据sessionID到服务器的内存中查找session对象(因为每个session都会有一个sessionID来标识session对象),找到之后然后使用。
如果cookie中没有sessionID这证明是一个新的会话。服务器就会创建一个新的Session对象,然后将SessionID存放早cookie中,通过cookie把sessionID发送到第三方应用端。第三方应用端下一次访问的时候,就会将SessionID发送到服务器以便再次找到这个session对象,完成会话跟踪所以如果用户将cookie关闭session也将会失效。session是依赖与cookie的。
与cookie的区别与联系:
cookie在第三方应用端保存用户的信息,而session在服务器上保存第三方应用的信息
session依赖于cookie。如果用户关闭cookie,则session失效,原因是sessionID无法从第三方应用端传递到服务端,也不能从服务端传递到第三方应用端.
session怎么设置过期时间:
第一种方法即设置php.ini配置文件,设置session.gc_maxlifetime和session.cookie_lifetime节点属性值
第二种方法即设置Session时间戳