在 asp.net 中处理会话超时的最佳方法是什么

sto*_*oic 5 c# asp.net session-timeout

有多种方法可以处理会话超时,例如加载函数上的“元刷新”javascript 等。

我想要一些整洁的东西:超时前 5 分钟,警告用户...

我也在考虑只要浏览器打开就保持会话打开(仍然需要弄清楚如何做到这一点......可能是一些带有刷新的 iframe)。

你如何处理会话超时,你认为我应该往哪个方向发展?

Ari*_*tos 3

处理会话超时的最佳方法。

我说有2种基本情况。
一种是用户输入很少或不输入数据,只是阅读报告,或者用鼠标进行一些小思考。在这种情况下,没有简单的方法来通知他会话即将过期。如果您要检查调用后面代码的会话的剩余时间,那么您会自动更新会话。然后,如果您有一个计时器来对会话进行倒计时,那么也许用户打开了您网站的新选项卡,并且会话即将过期,但您用 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> 
Run Code Online (Sandbox Code Playgroud)

在第三种情况下,您可以这样做。我们关心会话是否仅在回发时过期。当用户输入一些数据并在回发时,应用程序将他重定向到登录页面,并且帖子丢失。

在第三种情况下,您可以捕获发布数据并保存它们,直到用户重新登录。您捕获的帖子数据global.asax

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
Run Code Online (Sandbox Code Playgroud)

这是在重定向到登录页面之前调用的函数,您可以在其中查看是否有发布数据以及登录所需的使用,您保存该发布数据,以太到新的重定向页面,以太到服务器(可能在会话,可能在您的临时数据库上)。

现在,当用户再次登录后,您再次将他重定向到包含保存的帖子数据的最后一页,并且用户将按原样继续。

这里唯一的技巧是创建一个中间页面,用最后发布的数据和自动重定向 JavaScript 调用来呈现表单。