1

有没有办法在不回发的情况下重置会话超时?

在这种情况下,我不仅想对用户隐藏回发,还需要在没有回发的情况下重置超时。

在我的页面上,我需要弹出一个对话框并通知用户他的会话超时,如果他想让它保持活动状态,他需要单击一个按钮。现在,当他单击该按钮时,我不想回发该页面,因为这会导致数据出现问题。(不涉及问题)


根据答案,我已经修改了代码,但它仍然无法正常工作。docs.google.com/open?id=0B-Pl5DH2W9MvMDV6SUNiTXR0Z2M

4

3 回答 3

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>

我已将随机数放在最后,以避免将其保留在缓存中并强制它再次重新加载。这里没有回发,只是一个小的图像加载。

于 2012-12-21T22:28:05.930 回答
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();' >
于 2012-12-21T22:06:39.490 回答
0

这里有许多有用的建议:How To Keep ASP.NET Session Alive

于 2016-02-08T10:55:32.007 回答