33

web.configファイルでセッションタイムアウトを指定しました。セッションがタイムアウトすると、ログインページにリダイレクトされませんが、オブジェクト参照がインスタンスに設定されていないというエラーが表示されます。

誰かがこれの解決策を教えてもらえますか?

4

8 に答える 8

20

HttpContext.Current.User.Identity.IsAuthenticated現在認証されているユーザーがいるかどうかを知ることができるプロパティを確認できます。

于 2012-05-07T10:02:42.910 に答える
16

編集

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"); 
         } 
      } 
   } 
}

ユーザーUseridがWebサイトにログインしたときにセッション変数に保存し、マスターページまたは作成されたベースページフォームを確認して、他のページが継承します。次に、存在するページロードチェックで、Userid存在しない場合はログインページにリダイレクトします。

if(Session["Userid"]==null)
{
  //session expire redirect to login page 
}
于 2012-05-07T10:02:10.260 に答える
9

コード内のセッション変数をチェックせず、代わりにFormAuthenticationを使用することを好みます。web.configで指定された特定のLoginPageにリダイレクトする機能が組み込まれています。

ただし、セッションを明示的にチェックする場合は、Pranayが回答したときに、セッションで以前に作成した変数のNULL値をチェックできます。

Login.aspxページを作成し、そこにメッセージを書き込むことができます。セッションが期限切れになると、FormAuthenticationはFormAuthenticationセクションで指定されたloginUrlに自動的にリダイレクトされます。

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

LoginとSessionExpireに別々のページを指定することはできないため、Login.aspxの一部のセクションを表示/非表示にして、両方の方法で機能させる必要があります。

formauthentication-> loginurlを変更せずにタイムアウト後にsessionexpireページにリダイレクトする別の方法があります。これについては、以下のリンクを参照してください:http ://www.schnieds.com/2009/07/aspnet-session-expiration-redirect.html

于 2012-05-07T10:05:06.497 に答える
7

使用Session.Contents.Count

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

上記のコードは、ユーザーが最初にサイトにアクセスしたときに少なくとも1つのセッション変数が作成されていることを前提としています。データベースがない場合は、アプリにデータベースを使用していない可能性があります。あなたの場合、以下の例を使用して、セッション変数を手動で割り当てることができます。

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

幸運を祈ります!

于 2012-07-03T17:43:35.920 に答える
6

null かどうかを確認します。

if(Session["mykey"] != null)
{
  // Session is not expired
}
else
{
  //Session is expired
}
于 2012-05-07T10:02:16.017 に答える
2

@Adi-lester の回答を使用して、いくつかのメソッドを追加します。

セッションが有効かどうかを確認する方法

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

ページ読み込みでセッション変数を作成する

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
}
于 2013-03-01T20:58:43.370 に答える