セッションの変更が変更されたとき、または無効な場合はhttpCookieは削除されません。
-
18-09-2020 - |
質問
httpCookieを作成しています。expiresプロパティではなく名前と値のみを設定してから、応答に追加します。十分に簡単です。クッキーは予想通りに作成されます(ただし永続化されていません)。問題は、何らかの理由でセッションが変更されたとき(Webサイトのように、またはデバッグ時にアプリを再構築しました)の場合、クッキーは周りにまとまります。 Cookieが作成された元のセッションのみに有効になることができます。
MSDNによると、Cookieの有効期限を指定しない場合、Cookieはクライアントコンピュータに永続化されず、ユーザーセッションが期限切れになると期限切れになります。 "
私は「セッションの有効期限」を正確に知らないと思います。セッションが期限切れになると、Cookieが20分後に削除されます。しかし、それが作成したセッションが存在しない場合は、Cookieが削除されるべきですか? Cookieが削除されるのを見た唯一の時間は、ユーザーがすべてのブラウザウィンドウを閉じて新しいものを開くときです。
これがすべて真実である場合、私はCookieに元のセッションID( "ASP.NET_SESSIONID")を保存してから現在のセッションIDに対してそれをチェックしてから、クッキーを削除するか作成する新しいもの。
これはコードです(私のクッキーの間の唯一の違い、MSDNの例の唯一の違いは私がクッキーに複数の値を保存しています):
private void SaveValuesToCookie(string[] names, string[] values)
{
HttpCookie cookie = new HttpCookie("MyCookie");
for (int i = 0; i < names.Length; i++)
{
string name = names[i];
cookie.Values[name] = values[i];
}
Response.Cookies.Add(cookie);
}
private string GetValueFromCookie(string name)
{
HttpCookie cookie = Request.Cookies["MyCookie"];
if (cookie == null)
return null;
return cookie.Values[name];
}
. 解決
私がクッキーを見た唯一の時間 削除されたユーザーがすべてを閉じるときです ブラウザウィンドウと新しいものを開きます。
そしてそれはまさに、セッションが期限切れになったときにCookieが削除されると言ったときにMSDNが何を意味するか。残念ながら、とにかくブラウザで一貫していないと思いますので、誰にもあまり使われません。
常にクッキーで有効期限を設定する必要があります。
これがすべて真実であるならば、私はしなければならないかもしれません 元のセッションIDを保存します ( "ASP.NET_SESSIONID")Cookieの中で、 それから現在からそれをチェックしてください セッションID、異なる場合は、その後 クッキーを削除するか、新しいものを作成します。
私はそれを言うのが嫌いですが、これもあなたを助けるつもりはありません。 .NET FrameworkはセッションIDをリサイクルするのが好きで、それが異なると保証することはできません。
悪いニュース邪魔にならないように、私はあなたが建築的な立場からやろうとしていることを再考することをお勧めします。
アプリの再起動は、サーバー上で完全に起こるものです。クッキーは完全にクライアント上で起こるものです。クライアントがサーバーと通信しますが、それは純粋に要求/応答関係であり、サーバーはアプリケーションの再起動などのイベントをブラウザに通信できません。
サーバーセッションの寿命にのみ有効な値を保存したい場合は、Cookieではなくセッションに保存しないのですか?
他のヒント
私はそれをすべて知っていますが、クライアントのニーズには十分に安全ではありません。セッションはそれでもなりすましているか注射されます。参照: http://msdn.microsoft.com/en-us/マガジン/ CC163730.aspx#S9
は、セッションを分離した期限切れのセキュアCookieを作成し、できるだけ満了日を更新することができます(つまり、ユーザーが特定のページにアクセスしたとき)。