同时使用Membership和Session,发现Session很容易丢失,大家一般是怎么解决的?
用户使用Membership登录后(vs2005自带的登录系统),再使用Session记录一些该用户相关的信息,但是在使用过程中发现只要网页几分钟不操作,Session[ "user "]经常就变成了null,原来赋值的信息不见了.
还有有时在操作过程当中,session[ "user "]信息也会莫明其妙的变成null,可能与出现的异常有关???
Session时间延时我已经设置了1小时.
------解决方案--------------------如果你发现网页几分钟不操作就丢失Session数据,那么设置为1小时不但是无病乱投医,而且是投了个庸医,从理论上说你的做法不但无用,如果有效还会损害服务器管理效率。
首先你要检查程序用有没有“清除Session项目”这种危险代码。
其次看看有没有什么代码修改bin、app_code目录下的文件,以及修改web.config文件。这些代码都是会造成应用程序重启的。
如果是自己的服务器,可以使用“状态服务器”来管理Session。
当你使用租用的虚拟主机并且也不想使用SQL Server数据库时应该这样,就是放弃使用Session项目来保存状态。在应用程序重启时,Session.SessionID并不改变(因此说Session丢失其实不准确,应该是Session中保存的数据项丢失)。你可以自己使用自己的ORM将内存对象自动保存在数据库中,并且自动从数据库中读出来,当然要定期清除最后一次访问比较久的超时Session所保存的状态值。
------解决方案--------------------改用Cookie好了
------解决方案--------------------Cookie加密存储
------解决方案--------------------别用session 了,我以前也用 session ,后来改cookie 了
------解决方案--------------------例如你要把一个“用户”类型的对象保存在Session中,只要这样写就可以了:
驾驶员 u=new 驾驶员( "张三 ");
u.age=19;
.....
MySession session=new MySession(Session.SessionID);
session[ "user "]=u;
可见,我所说的“Session服务”是指与asp.net的Session基本上用法完全一样的东西。只是因为asp.net太差劲了,我们需要写出更好的Session。