当前位置: 首页 > news >正文

Session丢失的问题!(转)

昨天去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丢失

原因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丢失

转载于:https://www.cnblogs.com/zhanghai/p/4461167.html

相关文章:

  • 架构探险笔记4-使框架具备AOP特性(上)
  • QT 字符串相等间距字符间增加字符
  • 第六篇:面向对象
  • LinuxShell 首字母大写
  • 柯里化/偏函数/Curring用法
  • 兄弟连区块链教程区块链背后的信息安全2DES、3DES加密算法原理二
  • [leetcode]_Symmetric Tree
  • Python使用Xpath轻松爬虫(脑残式)
  • 在实验静态块等时遇到到关于main函数的问题
  • 解读微软开源MMLSpark:统一的大规模机器学习生态系统
  • DAX2012 R3安装
  • GIS中栅格数据结构的显示与计算
  • ORM::联表查询
  • Flume学习之路 (二)Flume的Source类型
  • 【struts2】Struts2的系统架构
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Apache Zeppelin在Apache Trafodion上的可视化
  • CEF与代理
  • Druid 在有赞的实践
  • golang中接口赋值与方法集
  • Java多态
  • Leetcode 27 Remove Element
  • Python socket服务器端、客户端传送信息
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 讲清楚之javascript作用域
  • 前嗅ForeSpider教程:创建模板
  • 使用putty远程连接linux
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​水经微图Web1.5.0版即将上线
  • (C)一些题4
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (多级缓存)多级缓存
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (转)shell调试方法
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • **python多态
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core中的去虚
  • .net 无限分类
  • .NET 中让 Task 支持带超时的异步等待
  • .php文件都打不开,打不开php文件怎么办
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Transactional类内部访问失效原因详解
  • [04]Web前端进阶—JS伪数组
  • [BZOJ4016][FJOI2014]最短路径树问题
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [Grafana]ES数据源Alert告警发送
  • [leetcode] 61. 旋转链表
  • [LeetCode] Merge Two Sorted Lists
  • [Oh My C++ Diary]善用三目运算符(a?b:c)