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 相关文章推荐
解析Extjs与php数据交互(增删查改)
Jun 25 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
PHP实现阳历到农历转换的类实例
Mar 07 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
CI框架数据库查询缓存优化的方法
Nov 21 PHP
php实现base64图片上传方式实例代码
Feb 22 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 PHP
PHP大文件切割上传并带进度条功能示例
Jul 01 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 5.3.5安装memcache注意事项小结
2011/04/12 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python的Flask框架中web表单的教程
2015/04/20 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
Android分包MultiDex策略详解
2017/10/30 Python
Python简单I/O操作示例
2019/03/18 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
大学生优秀团员事迹材料
2014/01/30 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
紧急通知
2015/04/17 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书