有多种方法可以处理会话超时,例如加载函数上的“元刷新”javascript 等。
我想要一些整洁的东西,比如:超时前 5 分钟,警告用户......
我也在考虑在浏览器打开的情况下保持会话打开(但仍然需要弄清楚如何做到这一点......可能是一些刷新的 iframe)。
你如何处理会话超时,你认为我应该往哪个方向发展?
有多种方法可以处理会话超时,例如加载函数上的“元刷新”javascript 等。
我想要一些整洁的东西,比如:超时前 5 分钟,警告用户......
我也在考虑在浏览器打开的情况下保持会话打开(但仍然需要弄清楚如何做到这一点......可能是一些刷新的 iframe)。
你如何处理会话超时,你认为我应该往哪个方向发展?
处理会话超时的最佳方法。
我说有两种基本情况。
一种是用户输入很少或不输入数据,只是阅读报告,或者用鼠标做一些小思考。在这种情况下,没有简单的方法可以通知他会话即将到期。如果您要检查会话调用后面代码的剩余时间,那么您会自动更新会话。然后,如果您有一个计时器来倒计时会话,那么用户可能已经打开了您网站的新标签页并且会话将过期,但不是您使用 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)
这是在重定向到登录页面之前调用的函数,在那里你会看到你是否有发布数据和登录所需的使用,你保存那个发布数据,以太到一个新的重定向页面,以太到服务器(也许在会话,可能在您的临时数据库上)。
现在,在用户再次登录后,您再次将他重定向到保存的帖子数据的最后一页,并且用户继续保持原样。
这里唯一的技巧是制作一个中间页面,它使用最后发布的数据和自动重定向 javascript 调用来呈现表单。
我唯一能想到的就是在页面上生成一些脚本来创建客户端计时器,这样当页面被接收并呈现时,它可以在 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>
使用一些 jquery 来关闭 web.config 中的会话超时变量。您可以使用这个Jquery 延迟技巧,当特定时间发生时(页面加载后的 x 分钟数),它会弹出一个 div,说明会话超时 x 分钟。漂亮,干净,非常简单。
关于会话超时,Codesleuth 的 ajax 调用将是完美的。