【问题标题】:how to alert anonymous user on session timeout and redirect如何在会话超时和重定向时提醒匿名用户
【发布时间】:2013-11-12 15:18:47
【问题描述】:
我有一个模拟测试页面(无需身份验证)并将用户选择数据存储在会话变量中,并在结果页面上从这些会话中检索数据。会话超时设置为 20 分钟,滑动到期为真。有时用户空闲超过 20 分钟(默认超时)。我只想在会话超时并重定向时显示警报。我愿意使用 javascript、jquery 或 asp.net c#。我已经看到类似的问题和答案尝试过 Global.asax 会话结束和 jquery 解决方案,但似乎没有一个对我有用。任何机构都可以根据我的要求给我一个例子吗?谢谢
【问题讨论】:
标签:
c#
jquery
asp.net
session
【解决方案1】:
idleTime = 0;
$(document).ready(function () {
var idleInterval = setInterval(timerIncrement, 5000);
$(this).mousemove(function (e) {
idleTime = 0;
});
$(this).keypress(function (e) {
idleTime = 0;
});
});
function timerIncrement() {
idleTime = idleTime + 1;
if (idleTime >12 ) { //60 secs
alert("session expired");
window.location.href="a3.html";
}
}
此编码有助于在60secs 之后会话超时并在警报后重定向到另一个页面
【解决方案2】:
这对我来说非常有用
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
//It appears from testing that the Request and Response both share the
// same cookie collection. If I set a cookie myself in the Reponse, it is
// also immediately visible to the Request collection. This just means that
// since the ASP.Net_SessionID is set in the Session HTTPModule (which
// has already run), thatwe can't use our own code to see if the cookie was
// actually sent by the agent with the request using the collection. Check if
// the given page supports session or not (this tested as reliable indicator
// if EnableSessionState is true), should not care about a page that does
// not need session
if (Context.Session != null)
{
//Tested and the IsNewSession is more advanced then simply checking if
// a cookie is present, it does take into account a session timeout, because
// I tested a timeout and it did show as a new session
if (Session.IsNewSession)
{
// If it says it is a new session, but an existing cookie exists, then it must
// have timed out (can't use the cookie collection because even on first
// request it already contains the cookie (request and response
// seem to share the collection)
string szCookieHeader = Request.Headers["Cookie"];
if ((null != szCookieHeader) && (szCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
ScriptManager.RegisterStartupScript(this, this.GetType(), "Redirect", "alert('Your session has timed out due to inactivity. Please start the test again'); window.location.reload()", true);
}
}
}