在做asp.net编程开发的时候,我遇见这样的问题,一个用户只能在一台机器上登录,
如果有用户在其他机器上登录,系统将提示该用户已经登录!当前登陆非法!我的做法是: 用Application变量保存已经Login的用户信息,当Session_Start的时候,在Global.asax 文件里写Session_Start事件响应函数,记录登录用户!当用户Logout的时候,在Session_End 事件里,将Application变量中的用户信息做一个休正,即:清除SessionEnd的用户信息。 问题出现了!Session_End无法执行???为什么呢?后来看了几篇文章,做了试验,得出以下 结果,要让Session_End事件响应,需要做以下工作: 首先在web.config文件中需要有以下设置: <sessionState Session_End只在mode="inProc"模式下触发,timeout决定该事件的触发时间, 一般情况下,timeout是指Session失效的时间,我在自己设计的asp.net应用系统中, 使用Form校验方式,不需要Session来判断用户是否登录,所以设置timeout=1分钟, 不会影响正常操作,但是如果用户设计的系统使用Session来保存用户登录信息, 设置timeout=1,那么打开浏览器后,当用户在1分钟内不在该浏览器上进行操作, Session就会失效,这可能导致系统使用的不正常!对于一般用户而言,对着屏幕 看1分钟后,又要重新登陆一次,是个十分恶心的事情!
因此,如果使用Session来保存用户登录信息,建议采用其他方式! 比如在每个Page上做一个onunload事件响应函数,如:oncloseIE(),当浏览器关闭的时候, oncloseIE()执行,在oncloseIE函数里使用ajax方式,调用后台的server端函数,执行 Session.Abandon(); 这样的方法将是最直接,最及时的Session End处理! |
【转】ASP.NET之 关于触发Global.asax Session_End事件的经验
最新推荐文章于 2022-12-19 21:47:51 发布
【转】ASP.NET之 关于触发Global.asax Session_End事件的经验
2009-12-29 09:35