7

ブラウザを閉じたときにFormsAuthenticationのCookieを期限切れにしたい。 (PHPセッションと同じように機能させたい)

これがモデル(コントローラーではない)にある私の認証コードです。

Models / Auth.cs

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,
    model.UserId,
    DateTime.Now,
    DateTime.Now.AddDays(1),
    true,
    model.UserId +" "+reader["lastname"],
    FormsAuthentication.FormsCookiePath);

string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);

if (ticket.IsPersistent)
{
    cookie.Expires = ticket.Expiration;
}

HttpContext.Current.Response.Cookies.Add(cookie);

Web.config

<authentication mode="Forms">
    <forms name="user" timeout="60" loginUrl="~/Auth/login" path="/"></forms>
</authentication>
<authorization>
    <deny users="?" />
</authorization>

そしてもう1つの質問は、Cookieのタイムアウトを2回設定することです。

チケットで、

DateTime.Now.AddDays(1),

およびWeb.configファイルの認証

<forms name="user" timeout="60" loginUrl="~/Auth/login" path="/"></forms>

それらはどのように異なり、実際の期限切れCookieに影響を与えるのはどれですか?

誰もが知っている、私に教えてください。

ありがとうございました!

4

2 に答える 2

9

ブラウザを閉じたときにCookieを期限切れにすることはできません。ただし、Cookieを非永続化することはできます。つまり、Cookieは保存されないため、新しいブラウザを開くと、新しいCookieが作成されます(ただし、ほとんどのブラウザが非永続的にキャッシュする方法に注意してください。タブ付きのCookieの場合、これをクリアするにはブラウザ全体を閉じる必要があります)。

2番目の質問については、タイムアウトを指定しない場合はweb.configエントリが使用されます。

于 2012-05-24T18:37:08.740 に答える
0

jQueryのunloadイベントを使用して、ブラウザーが閉じていることを検出できます。

ただし、このイベントは次の場合にも発生します。ユーザーがリンクをクリックしてページを離れるか、アドレスバーに新しいURLを入力した。進むボタンと戻るボタンでイベントがトリガーされます。ページのリロードでも、最初にアンロードイベントが作成されます。

イベントハンドラーを「アンロード」JavaScriptイベントにバインドします。

2番目の質問、web.configエントリをオーバーライドしてコードで設定したタイムアウトに答えます。

于 2012-05-24T18:49:11.533 に答える