【问题标题】:Alert user before session expires, option to renew session在会话到期前提醒用户,选择续订会话
【发布时间】:2012-03-17 20:15:27
【问题描述】:

我正在网络配置中设置会话时间。我还有一个用于检测会话超时并让用户知道的 javascript。

我希望能够在会话超时前 30 秒或一分钟或更长时间通过弹出窗口提醒用户,并让他们有机会延长或取消并让它超时。这可以做到吗?我曾尝试在互联网上使用各种方法,但似乎都没有奏效。他们都要求我下载一些东西,而我不想这样做。

<script type="text/javascript">
    var sessionTimeout = "<%= Session.Timeout %>";

    function DisplaySessionTimeout() {
        sessionTimeout = sessionTimeout - 1;

        if (sessionTimeout >= 0)
            window.setTimeout("DisplaySessionTimeout()", 60000);
        else
            alert("Your current Session is over due to inactivity.");
    }
</script>

我也在检查后面代码中的超时并重新编写,但考虑只在 javascript 中进行。

protected void Page_Init(object sender, EventArgs e)
{
    CheckSession();
}


private void CheckSession()
{
    if (Session["ASP.NET_SessionId"] == null)
    {
       // Session.RemoveAll();
       Response.Redirect("Home.aspx");
    }
}

【问题讨论】:

    标签: c# javascript asp.net


    【解决方案1】:

    你必须有一个与会话相同的时间限制的计时器;客户端无法确切知道会话到期前的时间。这就是我在应用程序中所做的。

    我们使用 JQuery $.get("keepalive.aspx") 向 ASP.NET 页面发出请求,该页面访问会话并刷新它,从而保持当前会话处于活动状态。然后,您还将重置您的客户端计时器。这对我们来说效果很好。

    更多信息请参见this post

    【讨论】:

    • 我不知道该怎么做。我也不知道该怎么做:我们做一个 JQuery $.get("keepalive.aspx") keepalive 页面中的内容? .get 只是调用它吗?
    • $.get 发出 AJAX 请求。它请求一个 ASP.NET 页面,这很重要,因为 ASP.NET 页面是一个具有可用会话的处理程序。您只需对 session 做一些事情,并使 session 再保持 20 分钟(或任何应该的 session)。所以本质上是创建一个保持活动页面,在后面的代码中对会话进行一些操作。它的唯一目的是被 JQuery 调用。
    • 我用$.get("keepalive.aspx"); 做了。这就是你所需要的。
    • 是的,您可以在母版页中执行此操作。注意在 1 分钟前给他们警告可能有点太近了;您可能想提前 3 或 5 分钟做。
    • @CiaranGallagher 每当向 ASP.NET 页面发出请求时,ASP.NET 框架都会处理会话的扩展。
    【解决方案2】:

    Here 是一个很好的例子,说明如何使用 Jquery 发出“会话超时”警告

    Here 是它的实际演示

    【讨论】:

    • 这个“异步回发不会延长会话,除非您使用无 cookie 会话”听起来不正确——据我所知,任何带有 cookie 的请求都会延长会话超时。您可能还有别的意思 - 添加链接/评论会很好。
    • 我不知道该怎么做://延长会话使用 $.get("keepalive.aspx") 之类的方法
    • @Alexie,你的权利,我的意思是其他不适用于这里的东西。我修改了答案。
    • @icelated,我提供了另一个答案,如果这对你有用,请告诉我。
    • 这正是我想要的。这段代码是否像 javascript 一样进入 head 部分?我需要下载什么吗?
    【解决方案3】:

    您也可以查看 Microsoft 示例,这似乎正是您的问题,请尝试 here

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      相关资源
      最近更新 更多