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 相关文章推荐
探讨:web上存漏洞及原理分析、防范方法
Jun 29 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
php获得url参数中具有&的值的方法
Mar 05 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 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 读取文件头判断文件类型的实现代码
2013/08/05 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
使用pdb模块调试Python程序实例
2015/06/02 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
python try...finally...的实现方法
2020/11/25 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
什么是URL
2015/12/13 面试题
大学运动会入场词
2014/02/22 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
python 中的@运算符使用
2021/05/26 Python
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
Pandas数据结构之Series的使用
2022/03/31 Python