Проверка истечения времени ожидания сеанса - PullRequest
4 голосов
/ 06 августа 2010

Это мой базовый класс для всех страниц, кроме EndSession.aspx

override protected void OnInit(EventArgs e)  {  
base.OnInit(e);  

if (Context.Session != null)  
     {  
         //check the IsNewSession value, this will tell us if the session has been reset.  
         //IsNewSession will also let us know if the users session has timed out  
         if (Session.IsNewSession)  
         {  
            //now we know it's a new session, so we check to see if a cookie is present  
             string cookie = Request.Headers["Cookie"];  
             //now we determine if there is a cookie does it contains what we're looking for 
             if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0) )//&& !Request.QueryString["timeout"].ToString().Equals("yes"))  
             {  
                 //since it's a new session but a ASP.Net cookie exist we know  
                 //the session has expired so we need to redirect them  

                 Response.Redirect("EndSession.aspx?timeout=yes");  
             }  
         }  
     }  
 } 

Но в EndSession я пытаюсь перейти обратно, скажем, default.aspx, и затем этот код выше просто перенаправляет обратно в EndSession.aspx.

Итак, для более ясного объяснения: Шаг 1: перейдите на mypage.aspx Шаг 2: дождитесь тайм-аута Шаг 3: попытайтесь отойти на шаг Шаг 4: перенаправьте на EndSession.aspx Шаг 5: попробуйте перейтипрочь Шаг 6: GoTo set 4

Setp 6 должен быть в состоянии уйти ...

(при необходимости, пожалуйста, попросите дальнейших разъяснений)

Есть идеи?

СПАСИБО !!!

1 Ответ

4 голосов
/ 06 августа 2010

Я избавился от базовой страницы, которая была у меня изначально.

Поместите это в Session_Start в Global.asax

void Session_Start(object sender, EventArgs e) 
{
    string cookie = Request.Headers["Cookie"];
    // Code that runs when a new session is started
    if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0))//&& !Request.QueryString["timeout"].ToString().Equals("yes"))  
    {
        if(Request.QueryString["timeout"] == null || !Request.QueryString["timeout"].ToString().Equals("yes"))
            Response.Redirect("Default.aspx?timeout=yes");
    }
}

Поместите это на страницу Defualt.aspx:

 if (!IsPostBack)
    {
        if (Request.QueryString["timeout"] != null && Request.QueryString["timeout"].ToString().Equals("yes"))
        {
            Response.Write("<script>" +
               "alert('Your Session has Timedout due to Inactivity');" +
               "location.href='Default.aspx';" +
               "</script>");
        }
    }

Это решение работает, даже если время ожидания истекло на странице Default.aspx

Обсуждение решения, которое я использовал, размещено здесь: Как остановить рекурсивное определение времени ожидания сеанса на базовой странице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...