3

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];
}
4

2 に答える 2

3

Cookie が削除されるのを見たのは、ユーザーがすべてのブラウザ ウィンドウを閉じて新しいウィンドウを開いたときだけです。

セッションの有効期限が切れたときに Cookie が削除されると MSDN が言っているのは、まさにそのことです。残念ながら、これはブラウザー間で一貫性があるとは思えないため、誰にとってもあまり役に立ちません。

Cookie には常に有効期限を設定する必要があります。

これがすべて当てはまる場合は、元のセッション ID (「ASP.NET_SessionId」) を Cookie に保存し、現在のセッション ID と照合して、それらが異なる場合は、Cookie を削除するか、新しいものを作成する必要があります。 .

言いたくないのですが、これもあなたの役に立ちません。.NET Framework はセッション ID を再利用するのが好きなので、それが異なることを保証することはできません。

邪魔にならない悪いニュースですが、アーキテクチャの観点から何をしようとしているのかを再考することをお勧めします。

アプリの再起動は、完全にサーバー上で行われます。Cookie は、完全にクライアント上で発生するものです。クライアントはサーバーと通信しますが、これは純粋に要求/応答の関係であり、サーバーはアプリケーションの再起動などのイベントをブラウザーに伝えることができません。

サーバーセッションの存続期間中のみ有効な値をどこかに保存したい場合は、Cookie ではなくセッションに保存してみませんか?

于 2010-07-20T18:09:38.113 に答える
0

私はそれをすべて認識していますが、クライアントのニーズに対して十分に安全ではありません. セッションは、スプーフィングまたは挿入される可能性があります。参照: http://msdn.microsoft.com/en-us/magazine/cc163730.aspx#S9

セッションとは別に期限切れの安全な Cookie を作成し、可能な場合 (つまり、ユーザーが特定のページにアクセスした場合) に有効期限を更新する必要があるようです。

于 2010-07-21T14:52:44.380 に答える