基础理解之SESSION

来源:互联网 发布:淘宝哪家护肤品是正品 编辑:程序博客网 时间:2024/04/30 13:11
SESSION是服务器端的一种会话机制,当客户端的请求服务器创建一个SESSION时,服务器会先检测该请求里面是否包含一个惟一的sesionid,

如果是,说明服务器已经为该用户创建过SESSION,只要按照该sesionid检索出该用户的session供用户使用,如果没有sesionid,

服务器会为该用户新建一个带有唯一标识符sessionid的SESSION.

值得指出的是,应用的SESSION并不是请求服务器就会创建,而是在开启SESSION后,触发了创建对应SESSION才会创建.

既然SESSION是存储于服务器端的.所以如果服务器端出现了某些变动,或者错误.SESSION就会丢失.当然SESSION丢失必定还有其它原因 


下面就查阅资料和遇到的SESSION问题,列出常见SESSION丢失原因

1.SESSION生命周期结束.也就达到了SESSION存在的最长时间
2.客户端禁用了cookie
3.客户端出现问题,暂时无法存起cookie
4.php.ini中的session.use_trans_sid = 0或者编译时没有打开--enable-trans-sid选项
5.服务器端出现问题,如服务重启,文件权限更改,文件删除等问题
6.跨服务器session不同步

针对于上面的第一条.这个不出大意外都属于正常.按需求设置SESSION的生存时间  如:ini_set('session.gc_maxlifetime', 3600); 
这里还会有个疑问, 是不是关闭浏览器SESSION就清除了呢?
   实际上并不是这样的.服务器是不知道用户什么时候关闭浏览器的.理论上来说做不到关闭浏览器就清除对应的SESSION.但是可以通过js代码来监听浏览器的
关闭动作(window.oncolose).然后ajax向服务器返回关闭请求再去清除SESSION.但是这样也有一定的缺陷.在出现突发或者意外事件时.如电脑重启或者断电浏览器崩溃之类的
服务器并没有收到来自客户的关闭浏览器的ajax返回请求.
对于第二/三条的问题就不叫简单了.去开启cookie就是.后面有时间在写一篇关于cookie的.

php.ini的设置,对于每个phper来说是肯定需要了解的.所以第四个原因可以直接去修改session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项


服务器端出现问题这个我是没法解决的,毕竟SESSION只是服务器上的临时文件.但是可以结合第六个原因,我们可以将SESSION写入文件和数据库中,当SESSION丢失了或者说不存在时,就去读取这个文件或者数据库,然后重新写入SESSION中.但是这样就需要我们把握好什么时候该去清楚这个文件或数据库中的SESSION了.


当然肯定还有其它的方法的,目前只是一个初中级的phper,接触的较少,只能想到这么多,后面遇到了再补充吧

0 0
原创粉丝点击