在用户打开浏览器窗口的情况下,保持ASP.NET会话活动的最简单、最容易的方法是什么?它是定时AJAX调用吗?我想防止以下情况:有时用户长时间打开他们的窗口,然后输入内容,然后提交时,由于服务器端会话过期,什么都不起作用。我不想在服务器上增加超过10分钟的超时值,因为我希望关闭的会话(通过关闭浏览器窗口)快速超时。
建议,代码示例?
发布于 2013-10-21 17:15:44
每当您向服务器发出请求时,会话超时都会重置。因此,您可以只对服务器上的空HTTP处理程序进行ajax调用,但要确保禁用该处理程序的缓存,否则浏览器将缓存您的处理程序,而不会发出新的请求。
KeepSessionAlive.ashx.cs
public class KeepSessionAlive : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
context.Response.Cache.SetNoStore();
context.Response.Cache.SetNoServerCaching();
}
}
.JS:
window.onload = function () {
setInterval("KeepSessionAlive()", 60000)
}
function KeepSessionAlive() {
url = "/KeepSessionAlive.ashx?";
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", url, true);
xmlHttp.send();
}
@veggerby -不需要在会话中存储变量的开销。只需预先向服务器发出请求就足够了。
发布于 2009-09-16 16:20:28
您真的需要保留会话吗(其中有数据吗?)或者,当请求进入时,通过重新实例化会话来伪造这一点是否足够?如果是第一种情况,请使用上面的方法。如果是第二种情况,请尝试使用Session_End事件处理程序。
如果您有表单身份验证,那么在Global.asax.cs中就会得到如下内容
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(formsCookie.Value);
if (ticket.Expired)
{
Request.Cookies.Remove(FormsAuthentication.FormsCookieName);
FormsAuthentication.SignOut();
...
}
else
{ ...
// renew ticket if old
ticket = FormsAuthentication.RenewTicketIfOld(ticket);
...
}
并且您将票证生存期设置得比会话生存期长得多。如果您没有进行身份验证,或者使用不同的身份验证方法,则有类似的技巧。微软的TFS web界面和SharePoint似乎都在使用它们--如果你点击一个陈旧页面上的链接,你会在弹出窗口中得到认证提示,但如果你只使用一个命令,它就能工作。
发布于 2016-05-05 14:53:38
你可以把这段代码写进你的java脚本文件,就是这样。
$(document).ready(function () {
var delay = (20-1)*60*1000;
window.setInterval(function () {
var url = 'put the url of some Dummy page';
$.get(url);
}, delay);
});
(20-1)*60*1000
是刷新时间,它将刷新会话超时。刷新超时按iis默认超时= 20分钟计算,即20×60000 = 1200000毫秒- 60000毫秒(会话到期前1分钟)为1140000。
https://stackoverflow.com/questions/1431733
复制相似问题