2012-01-13 12 views
15

私はASP.NET MVC 3を使用しています。フォーム認証を使用しています(変更されたバニラアカウントコードに基づいて、ファイル - >新規)。あなたがログインするとASP.NET MVCの永続認証クッキーが機能しないのはなぜですか?

、私はこれが永続的なCookieを設定する必要があります

FormsAuthentication.SetAuthCookie(userName, true); 

と認証Cookieを設定しています。しかし、ブラウザを閉じてもう一度開くと、サイトを参照すると再びログインする必要があります!私は、ブラウザを閉じたときにクッキー(.ASPXAUTH)が作成されていて、削除されていないことをChromeの開発ツールを使って確認できます。

私のweb.configファイル:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogIn" timeout="10000"/> 
</authentication> 

それはすべての違いを、私はIISの下で、ローカルでこれをテストしています。

+1

この回答を確認することができます:http://stackoverflow.com/questions/682788/making-user-login-persistant-with-asp-net-membership – alexl

+2

いいえ、このリンクは私のためにそれを並べ替えるようでした - SetAuthCookieを使用して設定を変更して明示的にクッキー名をweb.confgに設定すると、すべて動作しています。奇妙な! –

+0

@Matt Roberts - 理由は分かりませんが、クッキー名を設定することでそれも解決しました。あなたはそれがちょうどドメイン特有のCookieで動作すると思います。これはMVCや.NETのバグでしょうか? – Greg

答えて

3

が@alexlからのコメントから解決Making user login persistant with ASP .Net Membership

[OK]を、このリンクは私のためにそれを並べ替えるように見えた - SetAuthCookieに固執し、明示的にクッキー名を設定するには、私の設定を微調整します(web.confgの中で)、すべては現在動作しています。奇妙な! -

8

私は認証チケットを使用して自分自身をクッキーにすることをお勧めします。 SetAuthCookieは、フードの下に認証チケットを作成します。あなた自身の認証チケットを作ろうとしましたか?それは、それに余分なデータを格納することができます。ここで

は例です:

// create encryption cookie   
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, 
     userName, 
     DateTime.Now, 
     DateTime.Now.AddDays(90), 
     createPersistentCookie, 
     string.Empty); 

// add cookie to response stream   
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);  
System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
if (authTicket.IsPersistent) 
{  
     authCookie.Expires = authTicket.Expiration; 
} 
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie); 

は、この情報がお役に立てば幸いです。あなたはこの答えを確認することができます

+0

ありがとうございます。だから私はSetAuthCookieを使うべきではないでしょうか? MSDNのドキュメントでは、これを使用して永続性のある認証クッキーを作成するように指示しています。また、新しいMVCアプリケーション用のバニラコードはSetAuthCookieを使用しています - それは間違っていますか? –

+0

SetAuthCookie()は世界的に同じことをしています。それはそれがすべての時間を動作しないように見えるので、ちょうど変だ。 myslefを認証チケットとして作成し、それをレスポンスストリームに追加することをお勧めします。 –

+0

あなたの質問にコメントとして投稿されたリンク@alexlもチェックしてください。 –

関連する問題