这个问题发生两次了,所有常规的SESSION丢失的点全都检查过,没有任何问题,而且这个是已经使用过几个月的系统。
我的问题和下面这位兄弟的问题一样:
http://bbs.csdn.net/topics/340144067
问题描述:
系统登录页面使用SESSION存放验证码,
在公司里,登录系统的时候SESSION一直丢失,而在浏览器没有关闭、没有重启的情况下把网络切换到我手机的3G网络,直接点击验证码图片刷新后,就可以登录了。
系统使用ASP.NET MVC2搭建。
====================
和网络技术人员沟通到得知公司使用的是双线宽带,上网的时候会自动均衡,使用哪一路。
然后我做了一个测试,在Web服务器端监测客户端的IP地址,发现IP地址会随机在两个IP中切换,同时每次的SESSIONID都不相同。
公司一直都是用的双线宽带,很久以前出过一次这样的问题,只有2个小时,这次却持续了两天。
貌似和服务器端没什么关系,可是和客户端似乎也没什么关系,那就似乎只有是和网络有关系了。
不知道哪位大神遇到过这种情况,如何解决。
=====================
目前仍然在进行各种测试中。会持续跟进
=====================
重启了公司路由器问题解决了
听网络技术人员说和联通公司定期检查ADSL宽带共享有关系。不知道原理是什么,如何从技术上避免这个问题
ASP.NET?WEB?SESSION
------解决方案--------------------
session 和路由器没关系。
------解决方案--------------------
不是没有兴趣,是问题没遇到过,什么答案都是一个字:猜
session不是和服务器/客户端没关系的
session依赖cookies,cookies不能跨域,这是一个猜想点
------解决方案--------------------
可以把session存某台服务器的sql server上
------解决方案--------------------
首先需要安装用于存放会话的数据库,当然,MS在.net Framework中已经提供了现成的工具。在类似于:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727文件夹下可以找到InstallSqlState.sql 文件,这其实是一个文本文件,里面存放着用于创建“会话数据库”的脚本,只需要把它们复制到查询分析器中,运行就可以了。提示成功后,会在相应的数据库中生成名称为ASPState的数据库。
配置文件做相应的变动:
<sessionState
mode="SQlServer"
stateConnectionString=tpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
即将mode由“Inproc”改为“SQLServer”。
我以前安装的是1.1版本的数据库,对于.net2.0的程序无法正常使用,需要先删除旧版的数据库重新安装新版就行了。删除的方法也是采用MS提供的工具,这个工具也可在同样的文件夹下找到 UnInstallSqlState.sql文件,在查询分析器运行其中的脚本。对于适合.net的版本,是兼容1.1的。
另外,对于数据库连接字串,最好采取信任连接。