Session 失效的原因汇总及解决丢失办法


Posted in PHP onSeptember 30, 2015

昨天去GTSC面试,有面试官问我关于Session丢失之后怎么查的问题,说老实话,开发到现在很少碰到这样的情况,唯一想到的就是Session超时,还有就是做Session读写日志,发觉面试官听了之后不是很满意,汗!

不管怎么说,是个学习的好机会,今天抽空查了一下网上关于这些问题的处理方法,总结一下,希望对大家有所帮助。

顺便提一下asp中Session的工作原理:

asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。

asp.net Session的实现

asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。

原因1:

bin目录中的文件被改写,asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失

原因2:

文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失

参考配置:

http://jingyan.baidu.com/article/22fe7ced78594f3002617f04.html

原因3:

似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开

原因4:

Session的时间设置是不是有问题,会不会因为超时造成丢失

原因5:

IE中的cookie数量限制(每个域20个cookie)可能导致session丢失

原因6:

使用web garden模式,且使用了InProc mode作为保存session的方式

解决丢失的经验

1. 判断是不是原因1造成的,可以在每次刷新页面的时候,跟踪bin中某个文件的修改时间

2. 做Session读写日志,每次读写Session都要记录下来,并且要记录SessionID、Session值、所在页面、当前函数、函数中的第

几次Session操作,这样找丢失的原因会方便很多

3. 如果允许的话,建议使用state server或sql server保存session,这样不容易丢失

4. 在global.asa中加入代码记录Session的创建时间和结束时间,超时造成的Session丢失是可以在SessionEnd中记录下来的。

5. 如果有些代码中使用客户端脚本,如javascript维护Session状态,就要尝试调试脚本,是不是因为脚本错误引起Session丢失

以上内容是三水点靠木小编给大家分享的session失效的几种原因,希望对大家有所帮助。

PHP 相关文章推荐
php学习笔记 数组遍历实现代码
Jun 09 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
YII中assets的使用示例
Jul 31 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
May 11 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
php如何比较两个浮点数是否相等详解
Feb 12 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
解决php表单重复提交实现方法
Sep 29 #PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 #PHP
php猜单词游戏
Sep 29 #PHP
PHP代码优化技巧小结
Sep 29 #PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 #PHP
PHP类的封装与继承详解
Sep 29 #PHP
PHP比较运算符的详细介绍
Sep 29 #PHP
You might like
php 不使用js实现页面跳转
2014/02/11 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
Python3如何判断三角形的类型
2020/04/12 Python
浅谈django 重载str 方法
2020/05/19 Python
python脚本和网页有何区别
2020/07/02 Python
python实现移动木板小游戏
2020/10/09 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
10条PHP编程习惯
2014/05/26 面试题
大学毕业生通用求职信
2013/09/28 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
学生感冒英文请假条
2014/02/04 职场文书
篮球比赛策划方案
2014/06/05 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL