SESSION是服务器端的一种会话机制,当客户端的请求服务器创建一个SESSION时,服务器会先检测该请求里面是否包含一个惟一的sesionid,
值得指出的是,应用的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的.
如果是,说明服务器已经为该用户创建过SESSION,只要按照该sesionid检索出该用户的session供用户使用,如果没有sesionid,
服务器会为该用户新建一个带有唯一标识符sessionid的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选项
当然肯定还有其它的方法的,目前只是一个初中级的phper,接触的较少,只能想到这么多,后面遇到了再补充吧