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面向对象全攻略 (十五) 多态的应用
Sep 30 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
php strftime函数的详细用法
Jun 21 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 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
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
Javascript中3个需要注意的运算符
2015/04/02 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
2016/08/16 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
python实现键盘控制鼠标移动
2020/11/27 Python
python获取服务器响应cookie的实例
2018/12/28 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
python中的global关键字的使用方法
2019/08/20 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
某公司的.net工程师面试题笔试题
2013/11/22 面试题
如何转换一个字符串到enum值
2014/04/12 面试题
大学生年度自我鉴定
2013/10/31 职场文书
婚礼证婚人证婚词
2014/01/08 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript