3

ログインページと page1 の 2 つのページがあります。page1 には pageload イベントの次のコードが含まれているため、ユーザーは直接 page1 に移動できません。ユーザーはログイン ページにリダイレクトされます。

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("loginpage.aspx");
}

ユーザーが pag1 でログアウトをクリックすると、設定後にログイン ページにリダイレクトされますSession["role"]=null。ログイン ページで、ユーザーがブラウザの [戻る] ボタンをクリックすると、page1 に移動できます。この場合のみ、 Response.Redirect("loginpage.aspx"); pageload イベントは機能しません。うまくいかないのはなぜですか?どうすれば機能させることができますか、またはこのシナリオでユーザーが page1 にアクセスできないようにするにはどうすればよいですか?

私は無力で、任意の(すべての)ブラウザのブラウザの戻るボタンのクリックを検出する別の方法のコードを要求することで、前回閉じました

編集回答に応じて:ログアウトボタンに対するコードは

protected void btnLogOut_Click(object sender, EventArgs e)
{
    Session["role"] = null;
    Session.Abandon();
    Response.Redirect("login.aspx");
}
4

4 に答える 4

2

後ろに表示されているページは、キャッシュされたバージョンである可能性があります。

最も簡単な方法は、応答リダイレクトを使用する代わりに、メタ リフレッシュをエコーすることです。セッションが明確であることも確認する必要があります。

Session.Abandon();
Response.Write("<meta http-equiv='refresh' content='0';URL='loginpage.aspx'>");
Response.End();

ユーザーが反撃すると、そのページに再びアクセスし、目的の URL にバウンスされます。彼らが何度もすばやく返信したり、履歴ドロップダウンから Page1 を選択してキャッシュされたバージョンを取得したりするのを止めるものは何もありません。

于 2012-11-23T17:47:00.947 に答える
1

これは間違いなく機能するはずです。Session["role"] を確認してください。null になることはないと思います

ログアウト時にこれを行う

Session.Abandon();

ページ実行の理由がページ サイクルに影響しない場合、「pageoad が機能していません」。ページが実行されると、常にLoad イベントが発生します。

そのため、Page_Load が時々実行されない場合は、ページがキャッシュされており、サーバー上で実行されていないことが原因です。ページは、ブラウザ、途中のルーター、またはサーバー側のページ キャッシュを使用するサーバーにキャッシュできます。

ページのサーバー側のページ キャッシュを有効にしていない場合、ページはブラウザーまたはネットワークにキャッシュされます。キャッシュ設定を使用して、これを排除しようとすることができます。

Response.Cache.SetCacheability(HttpCacheability.NoCache);

これにより、通常の状況ではページがキャッシュされなくなります。(ブラウザがオフライン モードでないことも確認してください。そうすると、キャッシュ可能性の設定に関係なく、キャッシュ内のすべてが使用されます。)

于 2012-11-23T17:46:45.483 に答える
0

このようなものを試すことができますか

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("~/loginpage.aspx");
}

この値は Web セッション中に保持されるため、ログアウト時にSession["role"] = nullを必ずリセットしてください。

于 2012-11-23T17:40:06.050 に答える
0

Session["role"] 値を削除して null に戻す必要があるように思えます。ユーザーがログアウトするとき、セッション値をクリアしているとは思わないので、ページの読み込みをブラウズしても、有効なログイン セッションがあると見なされます。

これに該当するかどうかをテストする簡単な方法は、if ブロック内の、Session["role"] == null を確認する場所を過ぎた場所にブレーク ポイントを配置することです。そのブレークポイントに到達したことがない場合は、役割が null ではなく、技術的にはまだ「ログイン」していることがわかります。

于 2012-11-23T17:40:45.567 に答える