2

MVC Webサイトでフォーム認証を使用していて、Cookieを追加する際に問題があります。暗号化されたフォーム認証チケットを使用してCookieに追加していますが、 「なAuthCookieを」)の名前が、値は常にnullで、日付が常に「01/01/0001夜12時」に設定されている有効期限...ここに私のログインコントローラのコードです:最初はMVC 3クッキーが動作しない

[HttpPost] 
public ActionResult Index(Login login, string returnUrl) 
{ 
    if (ModelState.IsValid) 
     try 
     { 
      User user = UserManager.Login(login.Username, login.Password); 
      string serialUser = Serialize.SerializeToString(user); 
      string ticket = FormsAuthentication.Encrypt(
       new FormsAuthenticationTicket(1, login.Username, DateTime.Now, DateTime.Now.AddMinutes(20.0), login.RemeberMe, serialUser)); 

      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticket) { Expires = DateTime.Now.AddMinutes(20) }; 
      Response.Cookies.Add(cookie); 


      if (String.IsNullOrEmpty(returnUrl)) 
       return RedirectToAction("Index", "Home"); 
      else 
       return Redirect(returnUrl); 
     } 
     catch (LoginFailedException) 
     { 
      ModelState.AddModelError("", "Login failed: Invalid Username or Password."); 
      return View(login); 
     } 
    else 
     return View(login); 

} 

私は仮定しました暗号化された文字列は長さのために動作していませんでしたが、私は単純なテストを作成してこれをテストしましたが、私は同じ結果を得ています。

は、誰もがあなたがリダイレクト()またはRedirectToAction()を呼び出すと、クッキーがクライアントに送信されないように、あなたが応答を終了している

+1

FormsAuthentication.SetAuthCookie()を使用していない理由はありますか? – rfmodulator

+0

SetAuthCookie()を使用すると、UserDataにアクセスすることはできません.IPRincipalとIIdentityのUserRoleとその他のオプションのデータを格納するために使用します。 –

+1

です。クライアントにロールデータを保存することをお勧めしますか? :)暗号化されているか、そうでなければ。 – rfmodulator

答えて

3

助けることができます。一部のソリューション:

  1. TempDataを使用すると、リダイレクト先のアクションにCookieを直接書き込んで情報を保持することができます。
  2. フォーム認証Cookie情報がNerdDinner code on CodePlexに書き込まれる方法を見てください。
  3. コメントに記載されているとおり、セッションで役割情報を保持することができます。セッションに役割情報を格納し、見つからない場合は役割から取得することを推奨しますが、現状のままではなく、問題があることがわかった場合は、そのままメンバーシップ・システムを使用してパフォーマンスチューニングを開始します。
+0

私は今、上記のようにカスタムロールプロバイダを使用しています。これは私のロールの問題を本当にうまく解決しました。私の認証チケットを設定するためのregradsとして、私はあなたのおかげで夕食の例を見てくれました。(これは感謝しています)、これは単に認証Cookieを同じ方法で設定しているようです: ユーザーの認証... 認証Cookieを設定します。 。 要求元のページにリダイレクト... –

+0

@JonGalloway。ソリューション番号3の問題は、 "AuthenticateRequest_handler"(通常はロールが必要な)を設定するために使用されるセッションにアクセスできないことです。 – tggm

関連する問題