3

セッションがタイムアウトした後、ログイン ページに自動的にリダイレクトしようとしています。このコードを Main.Master ページに追加しようとしました (他のすべてのページはこのマスター ページに接続されています)。

protected void Page_Load(object sender, EventArgs e)
{
            //Redirects to Login Page 3 seconds before session timeout
            Response.AppendHeader("Redirect", Convert.ToString((Session.Timeout * 60) - 3) + "; URL=~/Login.aspx");
}

Web 設定でセッション タイムアウトを 1 分に設定しました。

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

しかし、何も起こりません

誰かがこのコードの問題を見つけるのを手伝ってくれますか、またはそれを機能させるための他のアイデアを持っていますか?

編集: web.config からの認証ノード

<authentication mode="Forms">
    <forms name=".CAuthenticated" loginUrl="Login.aspx" protection="All" 
    timeout="20"/>
</authentication>
4

4 に答える 4

3
protected void Page_Init(object sender, EventArgs e)
{
    if (Session["Username"] == null)
    {
        Response.Redirect(ResolveClientUrl("~/login.aspx") + "?returnURL=" + HttpContext.Current.Request.Url.AbsolutePath);
    }
    else
    {
        lblUsername.Text = Session["Username"].ToString();
    }
}
于 2012-09-11T10:44:03.630 に答える
1

Refreshヘッダーで「リダイレクト」の代わりに使用する必要があると思います:

Response.AppendHeader("Refresh",
    Convert.ToString((Session.Timeout * 60) - 3) +
    ";URL=~/Login.aspx");
于 2012-07-31T14:46:46.287 に答える
1

AppendHeader「HTTP ヘッダーが送信された後にヘッダーが追加された」場合に例外が発生すると文書化されています。HTTP ヘッダーが送信される前に AppendHeader が呼び出されることを確認する必要があります。マスター ページによっては、Loadイベントが遅すぎる場合があります。Init代わりにイベントを試すことができます。

于 2012-07-31T14:53:00.103 に答える
1

これが私にとってうまくいく例です:

    <authentication mode="Forms">
      <forms loginUrl="~/Login/Index" defaultUrl="~/Admin" timeout="20">
      </forms>
    </authentication>

これがあれば、タイムアウト Cookie を自分で確認する必要はありません。これは、フォーム認証を使用していることを前提としています。

于 2012-07-31T14:58:55.323 に答える