2011-12-15 9 views
0

私のアプリケーションはAsp.Net MVC3にあります。私は2人のユーザー(Adminと一般).Imはログインユーザーのクッキーを維持しています。ログアウト後にユーザーがナビゲートできないようにします。

以下は私のクッキーコードです。以下は

public static void setCookiestring Password ,string UserName) 
{ 
    HttpCookie MyCookie= new HttpCookie("MyCookies"); 
    MyCookie["Password"] = Password; 
    MyCookie["UserName"] = UserName; 
    MyCookie.Expires.Add(new TimeSpan(0,30,0)); 
    HttpContext.Current.Response.Cookies.Add(MyCookies); 
} 

私のクッキーは、ユーザーが

public static bool logout() 
     { 
      HttpCookie MyCookie= new HttpCookie("MyCookies"); 

      MyCookie.Expires = DateTime.UtcNow.AddDays(-1); 
      HttpContext.Current.Response.Cookies.Add(MyCookies); 
      return true; 
     } 

をログアウトするとき、私はすべての指数(上のクッキーをチェックしようとした有効期限かのコードです)Controller.Ifのクッキーが存在します必要なページに移動し、それ以外の場合はホームに移動します。ユーザーがログアウトクリックすると

if (!Cookie.CheckCookie()) 
    { 
     //use the current url for the redirect  
     filterContext.HttpContext.Response.Redirect("~/Home/Index", true); 
    } 

それらがホームにリダイレクトされますが、ボタンをクリックした後に戻る、最後に訪問したページを表示することができています。 ユーザーがLogOutをクリックしたときに戻るボタンをクリックした場合でも、「訪問先にリダイレクトされ、最後に訪問したページではありません」というメッセージが表示されます。 ご提案ください

答えて

1

これを防ぐ1つの方法は、適切な応答ヘッダーを設定することにより、認証されたすべてのページをクライアント側にキャッシュから除外することです。 following postを参照して、サイトの認証済み部分に適用できるアクションフィルタの例を参照してください。

+0

@SamMKhanだから、IndexアクションがNoCache属性で装飾されていても、あなたはまだ 'Back'ボタンを使って戻ることができると言っていますか?これは私がそれをテストしたときではありませんでした。 –

+0

は私のNoCache命令コード 'パブリッククラスNoCache命令を見てみます:ActionFilterAttribute { 公共オーバーライドボイドOnResultExecuting(ResultExecutingContext filterContext) { VAR応答= filterContext.HttpContext.Responseを。 response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); response.Cache.SetValidUntilExpires(false); response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);応答.Cache.SetCacheability(HttpCacheability.NoCache); ; response.Cache.SetNoStore();ここ }} ' –

+0

は私のホームコントローラー ' [NoCache命令] 公共のActionResultインデックス(){ リターンビュー()です。 } ' どこでも間違っていますか、それ以上の変更は必要ですか? –