如何自动检测session过期本帖最后由 zsdc0306 于 2013-08-12 11:31:09 编辑我想要页面能够自动实时监测ses
如何自动检测session过期 本帖最后由 zsdc0306 于 2013-08-12 11:31:09 编辑 我想要页面能够自动实时监测session过期而不是通过button触发,是放在updatepanel里面吗?初学asp.net,求大神指点 重点是实时啊……在线等,求大神帮忙啊 session ASP.NET UpdatePanel [解决办法] ajax每段时间自动获取判断[解决办法]
var request; function checkSession() { request = new XMLHttpRequest(); request.open('GET', 'CheckSession.ashx'); request.onReadyStateChange = updatePage; request.send(); } function updatePage() { if (request.readyState == 4) { if (request.status == 200) { var val = req.responseText; var lblInfo = document.getElementById('lblInfo'); lblInfo.innerHTML = val; } } }这是通过ajax一次请求 CheckSession.ashx 返回值的代码,CheckSession.ashx负责查看session,要想循环执行你查下window.setInterval的用法吧
------解决方案--------------------
应该就是在页面加载的时候调用上面那种方法去请求checksession.ashx里面处理session
[解决办法] Global.asax.cs文件里有个protected void Session_End(object sender, EventArgs e)
事件
[解决办法] 引用: Quote: 引用: 不停的调用这个方法不就行了,加载的时候 不停调用?难道用一个while(1)么……当然不能这样循环了。可以定时比如5秒钟检测一次。
[解决办法] 引用: Quote: 引用: Global.asax.cs文件里有个protected void Session_End(object sender, EventArgs e) 事件 刚才又用了一下这个方法,我发现是我写错了,这个方法是能调用到的,但是我想用弹窗,本来用了response.write里面放js语句,现在发现这个要输出到页面上,不能直接在asax里response.write的,有没有解决方法?你没搞懂,Session_End触发的时候是没有请求的,自然不会有response。
[解决办法] 引用: Quote: 引用: Global.asax.cs文件里有个protected void Session_End(object sender, EventArgs e) 事件 刚才又用了一下这个方法,我发现是我写错了,这个方法是能调用到的,但是我想用弹窗,本来用了response.write里面放js语句,现在发现这个要输出到页面上,不能直接在asax里response.write的,有没有解决方法?如果你要弹窗口的话,那只能是在当前页面去判断了,这种情况下,你又不想用户去操作点击才触发,最好是用Ajax,其实我自己觉得也只能用这个方式了,虽然听别人说有服务器推的方式,但我暂时想不明白推的原理,只懂客户端拉的原理。
至于Ajax的知识,这里不好教,你得自己先去学会它.
我只给你说一下思路:
本地页面设定一个JS定时器,每多少秒就通过Ajax去请求服务器端(其实就是请求一个指定的页面,你可以想像成JS模拟一个小机器人从另一个IE打开指定的页面),然后你在这个被请求的服务端页面里写代码,看下Seesion是否过期,并返回值给Ajax,在接收到相应的值后,你在JS里写代码,该干嘛就干嘛,比如弹窗口什么的,我现在说可能你不懂,但你先去了解Ajax,然后再来看我说的,就懂了
假如,我是说假如,你真的无法理解Ajax,觉得它特别的高深莫测,那么,还有一个办法可以使用,
就是使用经典的iframe框架,你在页面中放一个隐藏(不显示它给用户),然后这个iframe里的src指向一个页面,你在这个页面里判断Session是否过期,如果过期,就response.write 输入要调用的JS函数,这里需要你了解如何从C#里的代码调用前端页面的JS函数了,其实也蛮简单的,response.write直接输出<script type="JavaScript">parent.SessionHasLost();</script>这在串字符就可以了,当然,标准的C#调用JS函数的方式不是这样的,具体请百度一下。
可能你会问,在判断页面调用JS函数?那也只是调用判断页面自身的JS函数啊,又不能调用iframe父页面的JS函数弹窗口, 呵呵,你问对了,我们把iframe放到页面里时,要通过iframe里的子页面反调用父页面的JS,那只能通过parent.的前缀或者top.前缀来调用父页面的JS函数,你自己测试一下吧
使用iframe时,你虽然指定了src,但你还是得放一个定时器,每几秒种重新加载这个iframe的src,好请求那个判断session过期的页面
[解决办法] 你通过ajax去判断session有没有失效,定时时间超过Session最大时长还好,如果定时时长小于Session过期时长,那不就相当于你一直在刷新Session保持它不过期么