有没有办法在不进行回发的情况下重置会话超时?
在这种情况下,我不只是想隐藏用户的回发,我需要在没有回发的情况下重置超时。
在我的页面上,我需要弹出一个对话框并通知用户他的会话超时,如果他想让它保持活着,他需要点击一个按钮。现在,当他点击该按钮时,我不想回发页面,因为它会导致数据出现问题。 (没有涉及问题)
基于我已修改代码的答案,但它仍然无效。 docs.google.com/open?id=0B-Pl5DH2W9MvMDV6SUNiTXR0Z2M
答案 0 :(得分:4)
要刷新会话,你需要调用一些东西 - 我建议只显示一个空的gif的简单处理程序。这是一个简单的代码:
public class JustEmptyGif : IHttpHandler ,IRequiresSessionState
{
// 1x1 transparent GIF
private readonly byte[] GifData = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b
};
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "image/gif";
context.Response.Buffer = false;
context.Response.OutputStream.Write(GifData, 0, GifData.Length);
}
public bool IsReusable
{
get {
return false;
}
}
}
这段代码只是一个处理程序,比方说EmptyImage.ashx
,请注意我已经包含了IRequiresSessionState
来调用和更新会话。
现在唯一认为你需要做的是用一些脚本更新隐藏的图像,如:
<img id="keepAliveIMG" width="1" height="1" alt="" src="EmptyImage.ashx?" />
<script>
var myImg = document.getElementById("keepAliveIMG");
myImg.src = myImg.src.replace(/\?.*$/, '?' + Math.random());
</script>
我已将随机数放在最后,以避免将其保留在缓存中并强制它再次重新加载。这里没有回发,只是一个小的图像加载。
答案 1 :(得分:1)
我能想到的唯一方法是对这样的虚拟.net页面进行ajax调用:
function keepAlive()
{
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", "KeepAlive.aspx", false );
xmlHttp.send( null );
}
然后像这样调用它
<input type=button onClick='keepAlive();' >
答案 2 :(得分:0)
这里有一些有用的建议:How To Keep ASP.NET Session Alive。