有多种方法可以处理会话超时,例如加载功能上的“元刷新”javascript。
我想要一些整洁的东西:超时前5分钟,警告用户......
我也在考虑在浏览器打开时保持会话开放(仍然需要弄清楚如何做到这一点......可能是一些带有刷新的iframe)。
你如何处理会话超时,你认为我应该进入哪个方向?
答案 0 :(得分:3)
处理会话超时的最佳方法。
我说有两个基本案例 一个是用户输入很少或没有数据,只是阅读报告,或者用鼠标做小思考。在这种情况下,没有简单的方法通知他会话即将到期。如果要检查调用后面代码的会话剩余时间,则自动更新会话。然后,如果您有一个计时器来倒计时,那么用户可能已经打开了一个新的网页选项卡,会话将会过期但不是您用javascript注意的时间,并且用户收到错误的消息。
所以对我来说,当用户输入很少或没有数据时,只要让会话过期,如果他失去了一次点击,它会在以后再次进行。
其次是当用户需要输入许多数据时,某些时间可能需要一些时间,例如长文本,要编写并修复它。在这种情况下,我使用以下技术,我不会让会话结束。
如何在浏览器中保持会话打开。
这是一个非常好用且简单的技术,我使用的图像在会话超时之前使用JavaScript重新加载它。
<img id="keepAliveIMG" width="1" height="1" src="/img/ui/spacer.gif?" />
<script language="javascript" type="text/javascript">
var myImg = document.getElementById("keepAliveIMG");
if (myImg){
window.setInterval(function(){
myImg.src = myImg.src.replace(/\?.*$/, '?' + Math.random());
}, 6000);
}
</script>
在第三种情况中,您可以执行此操作。我们关心会话是否仅在回发后过期。当用户输入一些数据并在帖子后面时,应用程序会将其重定向到登录页面并丢失帖子。
在第三种情况中,您可以捕获帖子数据并保存,直到用户重新登录。您可以在
上的global.asax
上捕获帖子数据
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
这是在重定向到登录页面之前调用的函数,在那里你看到你是否有发布数据和登录所需的用途,你将该帖子数据,ether保存到新的重定向页面,以太网到服务器(也许在会议上,可能在你的临时数据库上)。
现在用户再次登录后,您再次将其重定向到包含已保存帖子数据的最后一页,并且用户将继续保持原样。
这里唯一的技巧是创建一个中间页面,使用最后发布的数据和自动重定向的javascript调用来呈现表单。
答案 1 :(得分:1)
我唯一能想到的是在页面上生成一些创建客户端计时器的脚本,以便在接收和呈现页面时,它可以在X分钟后显示警报(即到期前5分钟)
如果您希望会话保持活动状态,则可以使用通过AJAX定期调用的通用处理程序(ASHX)来执行此操作。这将有助于刷新会话,只要AJAX调用继续,它就应该保持活动状态。
示例“keepalive.ASHX”:
<%@ WebHandler Language="C#" Class="keepalive" %>
using System;
public class keepalive : System.Web.IHttpHandler
{
public void ProcessRequest (System.Web.HttpContext context)
{
context.Response.ContentType = "text/json";
var thisUser = System.Web.Security.Membership.GetUser();
if (thisUser != null)
context.Response.Write("[{\"User\": \"" + thisUser.UserName + "\"}]");
}
public bool IsReusable
{
get { return false; }
}
}
这是页面上用来调用它的脚本(简单来说就是jQuery):
<script type='text/javascript'>
function keepAliveInterval()
{
$.ajax(
{
url: "keepalive.ashx",
context: document.body,
error: function () {
alert("AJAX keepalive.ashx error :(");
}
});
}
$(document).ready(function () {
window.setInterval('keepAliveInterval()', 60000);
});
</script>
答案 2 :(得分:0)
使用一些jquery来关闭web.config中的会话超时变量。您可以使用this Jquery延迟技巧,当特定时间发生时(页面加载后x分钟),它会在x分钟内弹出一个div会话超时。很好,干净,非常简单。
关于会话超时,Codesleuth的ajax调用将是完美的。