【解決方法】クライアントの Cookie を削除するにはどうすればよいですか?

プログラミングQA


こんにちは、Cookie について理解できないことがあります。Cookie が作成されると、クライアントのブラウザ上で作成されます。ブラウザ上の Cookie に作成した Cookie が表示されます。現在、2 人のユーザーが異なる時間にログインしています。 「私を覚えていますか?」とマークすると、両方のブラウザで 2 つの Cookie が作成されました。ユーザーの 1 人がログアウトすると、Cookie を物理的に削除することはできませんが、有効期限を更新することしかできないと表示されます。 これをやったとしましょう。ここが理解できないところです。ログアウトするときに、そこにある Cookie 名を選択して削除するか、日付をリセットします。

しかし、サーバーはこのプロセスがどのクライアントに属しているかをどのようにして知るのでしょうか? 作成時に一般的な Cookie 名を付けるだけなので、ユーザー固有の cookie_client_id は作成されません。Cookie を削除するとき、サーバー上でこれを行うため、この Cookie の削除は他のユーザーには発生しません。 要するに、私の質問は、ユーザーがログアウトするときに x ユーザーの Cookie のみを削除する必要があることをどのようにして知ることができるのかということです。 ありがとう

私が試したこと:

サーバー上のCookieを削除しようとしましたが失敗しました。

解決策 1

サーバーはそうではありません。 クライアントはそうします。

Cookie は、現在の (Windows、Linux、Android など) ユーザーのブラウザによってクライアント マシンに保存されます。マシン上のすべてのユーザーには個別のデータ領域があるため、ブラウザは現在のユーザー データにクッキーを保存します (Cookie はありません)。他のものにアクセスします)。

したがって、サーバーが Cookie にアクセスすると、ブラウザーに Cookie が要求され、ブラウザーは現在のユーザー データにアクセスして正しい情報を取得します。

サーバー ユーザーは異なります。サーバー ユーザーは、ブラウザの Cookie からの情報を使用して、サイトにログインするサーバー ユーザーを決定する「構造体」です。 そのユーザーがログアウトすると、サイトからログアウトしますが、サイト コードで新しい Cookie データを特に書き込まない限り、Cookie には影響しません。

解決策 2

I know that cookies are stored on the browser in the client's user profile, the server already writes it into a cookie on the browser. My question is that when the client wants to log out, it notifies the server, but this logout process takes place on the server side, for example 


<pre lang="C#">public ActionResult Logout()
        {
        
            Session.Clear();
            Session.Abandon();
            Session.RemoveAll();

            FormsAuthentication.SignOut();
            HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
            cookie1.Expires = DateTime.Now.AddYears(-1);
            Response.Cookies.Add(cookie1);

            return RedirectToAction("Index", "Login");
        }

ここでは FormsAuthentication.SignOut(); と書かれています。 そして日付をリセットして新しい Cookie ファイルをクライアントに送信します。 それでは、サーバーは Cookie ファイルを再作成し、日付を更新して新しい Cookie ファイルを作成してブラウザに送信すると、ブラウザは新しい Cookie ファイルを既存の Cookie ファイルで上書きし、Cookie が機能しなくなると言えるでしょうか? そうであれば、ブラウザはサイトからリクエストを行うときに Cookie の日時を調べて、古い日付の Cookie をサーバーに送信することはありませんよね。 つまり、サーバー側では、この Cookie が古いかどうかを確認する必要はありません。古い場合は、とにかくサーバーに送信されません。

通常の Cookie と FormsAuthentication の違いがわかりません。また、FormsAuthentication と FormsAuthentication.SetAutCookie を使用して Cookie を作成することの違いもわかりません。

C#
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
        username,
        DateTime.Now,
        DateTime.Now.AddMinutes(30),
        isPersistent,
        userData,
        FormsAuthentication.FormsCookiePath)

;

C#
HttpCookie userInfo = new HttpCookie("userInfo");
userInfo["UserName"] = "Annathurai";
userInfo["UserColor"] = "Black";
userInfo.Expires.Add(new TimeSpan(0, 1, 0));
Response.Cookies.Add(userInfo);

コメント

タイトルとURLをコピーしました