6

同様の質問をいくつか見つけましたが、本当に必要なものはありませんでした。

web.configこれが、ユーザーセッションの有効期限を処理するためにこれを追加したものです。

<sessionState mode="InProc" timeout="1" />

1分後、Session_EndからのイベントGlobal.asaxが発生します。

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
    Response.Redirect("Login.aspx")
End Sub

これは機能しません。理由は次のとおりです。

Response is not available in this context.

(ちなみに、この質問には、これは大丈夫であり、賛成票を獲得したという回答がありました)。

派手なものは何も欲しくない。セッション時間が経過したときにユーザーをログインページにリダイレクトする簡単な方法が必要です。それで全部です。

ありがとうございました。

4

4 に答える 4

3

説明

あなたはでPage_Initイベントを使用することができますglobal.asax

サンプル

Protected Sub Page_Init(sender As Object, e As EventArgs)
 If Context.Session IsNot Nothing Then
  If Session.IsNewSession Then
   Dim newSessionIdCookie As HttpCookie = Request.Cookies("ASP.NET_SessionId")
   If newSessionIdCookie IsNot Nothing Then
    Dim newSessionIdCookieValue As String = newSessionIdCookie.Value
    If newSessionIdCookieValue <> String.Empty Then
     ' This means Session was timed Out and New Session was started
     Response.Redirect("Login.aspx")
    End If
   End If
  End If
 End If
End Sub

詳しくは

于 2012-09-19T20:25:10.020 に答える
2

Session_End はサーバー側のイベントです。つまり、Web サーバーでトリガーされ、クライアントからの要求とは関係ありません。これが、リクエストが利用できない理由です。

この問題には 2 つの選択肢があります。

  1. クライアント要求ごとに、特定のセッション変数が設定されているかどうかを確認します。そうでない場合は、以前のセッションの有効期限が切れており、新しいセッションを設定する必要があることを意味します。(これが、セッションの有効期限を確認したい理由だと思います)

  2. セッションがまだ有効かどうかを確認するために定期的にサーバーに戻るクライアントで JavaScript 呼び出しを行います。セッションの有効期限が切れている場合は、ユーザーをログイン ページにリダイレクトできます。

さまざまなリダイレクト方法のサンプル

location.href = "login.aspx";
// or you can use 
location.assign("login.aspx");
//for redirecting without storing in history
location.replace("login.aspx")

?ReturnUrl=[current url]ログイン リダイレクト パスに追加することを忘れないでください。

HTH

于 2012-09-19T20:53:48.817 に答える
0

すべての Page_Init イベントで期限切れのセッションを確認します。このチェックを行うページが多すぎる場合、これは私が通常行うことです。

  • 基本クラスを作成し、System.Web.UI.Page から継承します。
  • 基本クラスの Page_Init イベントにリダイレクト ロジックを記述します。
  • 残りのページをこの基本クラスから継承させます。

幸運を。

于 2012-09-19T22:14:22.630 に答える
0

dknaackの答えのC#バージョンは次のとおりです。

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");
                }
            }
        }
    }
}
于 2014-11-27T16:02:05.197 に答える