1

私のasp.netアプリケーションは、ログアウトしたユーザーがブラウザーの戻るボタンを使用して以前にアクセスしたページに再度アクセスするという問題に直面しています。ユーザーはサーバー側のイベントを実行できませんが、ユーザーがこのページをまったく表示できないようにすると、はるかに良いでしょう。私はこれを止めるための解決策を探しましたが、ほとんどの解決策には、このように再訪してはならないページ内にコードを書くことが含まれています。

 protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            string sb;
            sb = "<script language=javascript>\n";
            sb += "window.history.forward(1);\n";
            sb += "\n</script>";
            ClientScript.RegisterClientScriptBlock(Page.GetType(), "clientScript", sb);
        }

これは、ログインしたユーザーがアクセスできるすべてのページにコードを記述する必要があることを意味します。この問題を処理するためのより良い方法はありますか?すべてのページにコードを書く必要がない最適化されたソリューションを期待しています。助けていただければ幸いです。

4

3 に答える 3

6

あなたの質問に基づいて、(以前のデータを表示するために) [戻る] ボタンの使用を防止したいだけで、サーバー側が正しく機能し、ログアウトしたユーザーがタスクを実行できないことを理解しています...

そうでない場合は、サーバー側で検証を追加して、ログアウトしたユーザー (ログインしたことのないユーザーと同じように扱う必要があります) が権限を必要とする操作を実行できないようにする必要があります...!

質問に戻りますが、ブラウザでキャッシュを無効にする必要があります。

コードビハインドでは:

Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);

ASPX ページで META タグを使用することもできます。

 <META Http-Equiv="Pragma" Content="no-cache">
 <META Http-Equiv="Expires" Content="0">
 <META Http-Equiv="Cache-Control" Content="no-cache">

これにより、ページがキャッシュされるべきではなく、Backボタンを介して再表示されないことがブラウザに通知されます

これで十分でない場合は、JavaScript を使用して履歴をクリアすることもできます。例を次に示します。

編集: そして、このコードを一度だけ表示したい場合は、このロジックを持つBasePage(から派生した) を作成できます。Page次に、このロジックが必要なページBasePageは、通常の代わりにから派生する必要がありますSystem.Web.UI.Page

于 2013-01-26T12:59:54.183 に答える
0

with the solution mentioned by @Blachshma, you can also have a GET variable that contains the timestamp of when the page was fetched. Then, in the Page_Load() event you can check if the timestamp was the same as the current timestamp. If it is not, you refresh or redirect the page(in your case to login page) This is how GMAIL does it IIRC.

Remember to put the time-check inside if(!IsPostBack) in Page_Load() event.

于 2013-01-26T13:04:35.570 に答える
0

Assuming that every page that is restricted checks that the user has access to that page, the problem you are having boils down to caching. If you do not check if the user is logged in, there is no way around it - you have to check on each page to be secured. Otherwise, it is a security hole.

Think about it this way. The page that the user visited, was saved to their computer so that it can be rendered to the user. The user then logged out. The previous page is still there on their computer as part of the browser cache.

In this case, there is nothing particularly wrong with the user being able to view that page again. If you want to secure this page, you have request the browser to not cache this page.

You can use meta tags to achieve this. .NET may have other ways to getting this done.

Do bear in mind that this will mean that every page which is set to be not cached will come back to the server each time and will be noticed to be slower. It will also put additional load on the web server. Depending on how busy your site is, this may not be an issue.

于 2013-01-26T13:02:49.783 に答える