Подтвердить что ты не робот

Как проверить, завершено ли сеанс или нет в asp.net

Я указал время сеанса в файле web.config.., когда сеанс - это таймаут, не получающий перенаправление на страницу входа, но я получаю ошибку, ссылаясь на ссылку на объект, не установленную в экземпляр.

может ли кто-нибудь сказать мне решение для этого?

4b9b3361

Ответ 1

Вы можете проверить свойство HttpContext.Current.User.Identity.IsAuthenticated, которое позволит вам узнать, есть ли пользователь, прошедший проверку подлинности, или нет.

Ответ 2

Edit

вы можете использовать свойство IsNewSession, чтобы проверить, был ли сеанс создан по запросу страницы

protected void Page_Load() 
{ 
   if (Context.Session != null) 
   { 
      if (Session.IsNewSession) 
      { 
         string cookieHeader = Request.Headers["Cookie"]; 
         if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0)) 
         { 
            Response.Redirect("sessionTimeout.htm"); 
         } 
      } 
   } 
}

до

Сохранять идентификатор пользователя в переменной сеанса при входе пользователя на веб-сайт и проверке на главной странице или создании формы базовой страницы, когда другая страница наследует... и при загрузке страницы проверяет, присутствует ли идентификатор пользователя или нет, если не перенаправлен на логин страница

if(Session["Userid"]==null)
{
  //session expire redirect to login page 
}

Ответ 3

Я предпочитаю не проверять переменную сеанса в коде вместо использования FormAuthentication. Они имеют встроенную функцию для перенаправления на заданный LoginPage, указанный в web.config.

Однако, если вы хотите явно проверить сеанс, вы можете проверить значение NULL для любой из переменной, созданной в сеансе ранее, как ответ Пранай.

Вы можете создать страницу Login.aspx и написать свое сообщение там, когда сеанс истекает. FormAuthentication автоматически перенаправляет на loginUrl, указанный в разделе FormAuthentication.

<authentication mode="Forms">
  <forms loginUrl="Login.aspx" protection="All" timeout="30">
  </forms>
</authentication>

Дело в том, что вы не можете предоставить отдельную страницу для Login и SessionExpire, поэтому вам нужно показать/скрыть какой-то раздел в Login.aspx, чтобы действовать в обоих направлениях.

Существует другой способ перенаправления на страницу sessionexpire после таймаута без изменения formauthentication- > loginurl, см. ссылку ниже для этой ссылки: http://www.schnieds.com/2009/07/aspnet-session-expiration-redirect.html

Ответ 4

Используйте Session.Contents.Count:

if (Session.Contents.Count == 0)
{
    Response.Write(".NET session has Expired");
    Response.End();
}
else
{
    InitializeControls();
}

В приведенном выше коде предполагается, что у вас есть хотя бы одна переменная сеанса, созданная при первом посещении пользователем вашего сайта. Если у вас его нет, вы, скорее всего, не используете базу данных для своего приложения. Для вашего случая вы можете просто вручную назначить переменную сеанса, используя приведенный ниже пример.

protected void Page_Load(object sender, EventArgs e)
{
    Session["user_id"] = 1;
}

Удачи вам!

Ответ 5

Проверьте, является ли оно нулевым или нет.

if(Session["mykey"] != null)
{
  // Session is not expired
}
else
{
  //Session is expired
}

Ответ 6

Я использую ответ @Adi-lester и добавляю некоторые методы.

Метод проверки наличия сеанса

public static void SessionIsAlive(HttpSessionStateBase Session)
{
    if (Session.Contents.Count == 0)
    {
        Response.Redirect("Timeout.html"); 
    }
    else
    {
        InitializeControls();
    }
}

Создать сеанс var в загрузке страницы

protected void Page_Load(object sender, EventArgs e)
{
    Session["user_id"] = 1;
}

Создайте метод SaveData (но вы можете использовать его во всех методах)

protected void SaveData()
{
    // Verify if Session is Alive
    SessionIsAlive(Session);

    //Save Data Process
    // bla
    // bla
    // bla
}

Ответ 7

Здесь я проверяю значения сеанса (два значения заполняются в текстовом поле на предыдущей странице)

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["sessUnit_code"] == null || Session["sessgrcSerial"] == null)
    {
        Response.Write("<Script Language = 'JavaScript'> alert('Go to GRC Tab and fill Unit Code and GRC Serial number first')</script>");
    }
    else
    {

        lblUnit.Text = Session["sessUnit_code"].ToString();
        LblGrcSr.Text = Session["sessgrcSerial"].ToString();
    }
}

Ответ 8

Таким образом, многие люди обнаруживают, что сеанс истек или нет. ниже код может помочь u.

protected void Page_Init(object sender, EventArgs e)
    {
        if (Context.Session != null)
        {
            if (Session.IsNewSession)
            {
                HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"];
                if (newSessionIdCookie != null)
                {
                    string newSessionIdCookieValue = newSessionIdCookie.Value;
                    if (newSessionIdCookieValue != string.Empty)
                    {
                        // This means Session was timed Out and New Session was started
                        Response.Redirect("Login.aspx");
                    }
                }
            }
        }
    }