【问题标题】:how to alert anonymous user on session timeout and redirect如何在会话超时和重定向时提醒匿名用户
【发布时间】:2013-11-12 15:18:47
【问题描述】:

我有一个模拟测试页面(无需身份验证)并将用户选择数据存储在会话变量中,并在结果页面上从这些会话中检索数据。会话超时设置为 20 分钟,滑动到期为真。有时用户空闲超过 20 分钟(默认超时)。我只想在会话超时并重定向时显示警报。我愿意使用 javascript、jquery 或 asp.net c#。我已经看到类似的问题和答案尝试过 Global.asax 会话结束和 jquery 解决方案,但似乎没有一个对我有用。任何机构都可以根据我的要求给我一个例子吗?谢谢

【问题讨论】:

    标签: c# jquery asp.net session


    【解决方案1】:
    idleTime = 0;
    $(document).ready(function () {
    
        var idleInterval = setInterval(timerIncrement, 5000); 
    
    
        $(this).mousemove(function (e) {
            idleTime = 0;
        });
        $(this).keypress(function (e) {
            idleTime = 0;
        });
    });
    
    function timerIncrement() {
        idleTime = idleTime + 1;
        if (idleTime >12 ) { //60 secs
            alert("session expired");
            window.location.href="a3.html";
        }
    }
    

    此编码有助于在60secs 之后会话超时并在警报后重定向到另一个页面

    【讨论】:

      【解决方案2】:

      这对我来说非常有用

       override protected void OnInit(EventArgs e)
      {
          base.OnInit(e);
      
          //It appears from testing that the Request and Response both share the
          // same cookie collection.  If I set a cookie myself in the Reponse, it is
          // also immediately visible to the Request collection.  This just means that
          // since the ASP.Net_SessionID is set in the Session HTTPModule (which
          // has already run), thatwe can't use our own code to see if the cookie was
          // actually sent by the agent with the request using the collection. Check if
          // the given page supports session or not (this tested as reliable indicator
          // if EnableSessionState is true), should not care about a page that does
          // not need session
          if (Context.Session != null)
          {
              //Tested and the IsNewSession is more advanced then simply checking if
              // a cookie is present, it does take into account a session timeout, because
              // I tested a timeout and it did show as a new session
              if (Session.IsNewSession)
              {
                  // If it says it is a new session, but an existing cookie exists, then it must
                  // have timed out (can't use the cookie collection because even on first
                  // request it already contains the cookie (request and response
                  // seem to share the collection)
                  string szCookieHeader = Request.Headers["Cookie"];
                  if ((null != szCookieHeader) && (szCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
                      ScriptManager.RegisterStartupScript(this, this.GetType(), "Redirect", "alert('Your session has timed out due to inactivity. Please start the test again'); window.location.reload()", true);
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        【讨论】:

          猜你喜欢
          • 2013-06-08
          • 1970-01-01
          • 2015-12-19
          • 1970-01-01
          • 1970-01-01
          • 2014-04-09
          • 2012-10-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多