2013-02-17 9 views
6

私はASP.NET MVCを使用しており、サイトに戻ったときに誰かが自動的にログインできるようにしたい(このサイトとまったく同じ方法で)。永続的なクッキーの有効期限がasp.net mvcのSessionに設定されていますか?

次のようにIでユーザーが最初に登録するか、ログがクッキーを設定します。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1, 
    "playerid", 
    DateTime.Now, 
    DateTime.Now.AddMinutes(1), //This will be set to a longer period in live... 
    true, 
    Username + "|" + item.PlayerID.ToString(), 
    FormsAuthentication.FormsCookiePath); 

string encTicket = FormsAuthentication.Encrypt(ticket); 
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 

私はユーザーとしてログインすることによってこれをテストしてからFirebugCookiesタブを見れば、その後の有効期限が設定されていますSessionになります。私はブラウザを閉じて私のサイトに戻っても、私はもはやログインしていません。これは、ブラウザが閉じられたときにセッションが終了すると私が期待しているものです。

ログインしてサイトをナビゲートすると、1分後に有効期限がSessionとして表示されなくなりますが、実際の日付スタンプとして表示されます。

要約すれば、有効期限がSessionに設定されているように見えますが、実際の有効期限が過ぎてから(t + 1分以内に)このケース)と私はサイト上でアクティブになっています(私はスライド有効期限を使用しています)。

FormsAuthenticationチケットに記載されているものに有効期限を設定する方法はありますか(Sessionとして表示されません)。

答えて

9

あなたはExpiresプロパティを設定することにより、クライアントのハードドライブに保存されているpersistent cookieを作成する必要があります。

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) 
{ 
    // setting the Expires property to the same value in the future 
    // as the forms authentication ticket validity 
    Expires = ticket.Expiration 
}; 
Response.Cookies.Add(cookie); 

は、クッキーとフォーム認証チケットのために同じ有効期限のタイムアウトを指定していることを確認します。

Set-Cookie: ASPXAUTH=...; Expires=Tue, 15-Jan-2014 21:47:38 GMT; Path=/; HttpOnly 
+0

うわー:あなたはFirebugのを見たときに今、あなたはクッキーは永続的なものとブラウザを生き残るたクッキーが放出されたときにExpiresプロパティは、将来的に設定されているが、再起動することがわかります!それは完全に機能します。私はこのサイトが大好き!ありがとうDarin –

+0

クッキーとチケットの違いを理解するのを助けるために、これは簡単な見解の価値があります。http://support.microsoft.com/kb/910443?wa=wsignin1.0 –

+0

リンクをありがとう。それは私がそれをより良く理解するのに役立ちます。 –

関連する問題