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 相关文章推荐
通过ICQ网关发送手机短信的PHP源程序
Oct 09 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
php 缩略图实现函数代码
Jun 23 PHP
PHP中其实也可以用方法链
Nov 10 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
php注册审核重点解析(数据访问)
May 23 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
PHP新手指南
Apr 01 PHP
php去除deprecated的实例方法
Nov 17 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远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
理清apply(),call()的区别和关系
2011/08/14 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
Bootstrap基础学习
2015/06/16 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
初步剖析C语言编程中的结构体
2016/01/16 Python
python使用mysql数据库示例代码
2017/05/21 Python
Python----数据预处理代码实例
2019/03/20 Python
关于python多重赋值的小问题
2019/04/17 Python
python issubclass 和 isinstance函数
2019/07/25 Python
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
历史专业个人求职信范文
2013/12/07 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
典型事迹材料范文
2014/12/29 职场文书
三八节活动主持词
2015/07/04 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
Python基础之tkinter图形化界面学习
2021/04/29 Python
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技