HttpCookieを作成し、名前と値のみを設定し、expiresプロパティは設定していないので、それを応答に追加します。十分に単純です。Cookieは期待どおりに作成されます(ただし、永続化されません)。問題は、何らかの理由でセッションが変更された場合(Webサイトが再構築された場合や、デバッグ時にアプリを再構築した場合など)、Cookieが残ります。Cookieは、それが作成された元のセッションに対してのみ有効である必要があります。
MSDNによると、「Cookieの有効期限の制限を指定しない場合、Cookieはクライアントコンピューターに保持されず、ユーザーセッションの有効期限が切れると有効期限が切れます」と書かれています。
「セッションの有効期限」が何を含むのか正確にはわかりません。セッションが期限切れになる20分後にCookieが削除されると思います。しかし、Cookieが作成されたセッションがさまざまな理由で存在しなくなった場合、Cookieを削除する必要がありますか?Cookieが削除されるのを確認したのは、ユーザーがすべてのブラウザウィンドウを閉じて新しいウィンドウを開いたときだけです。
これがすべて当てはまる場合は、元のセッションID( "ASP.NET_SessionId")をCookieに保存し、現在のセッションIDと照合して、異なる場合はCookieを削除するか、新しいCookieを作成する必要があります。 。
コードは次のとおりです(私のCookieとMSDNの例のCookieの唯一の違いは、Cookieに複数の値を格納していることです)。
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];
}