私のウェブサイトでは、ユーザーが[ログアウト]ボタンをクリックすると、Logout.aspxページにコードが読み込まれますSession.Clear()
。
ASP.NET/C#では、これによりすべてのCookieがクリアされますか?または、私のWebサイトのすべてのCookieを削除するために追加する必要のある他のコードはありますか?
回答:
そのようなことを試してください:
if (Request.Cookies["userId"] != null)
{
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);
}
しかし、使用することも理にかなっています
Session.Abandon();
それに加えて、多くのシナリオで。
Cookies["whatever"]
、Cookieが存在しない場合、実際にはnullを返します。私はこれが古いコメントであることを知っていますが、他の読者がこのコメントに誤解されてほしくないです。
Expires
設定しないことも非常に重要です。DateTime.MinValue
これにより、実際にCookieにセッションの有効期限が与えられます。つまり、ブラウザ/タブ(ブラウザに依存)が閉じられるまで待機してからCookieを削除します。
いいえ、Cookieは、それぞれに有効期限を設定することによってのみクリーンアップできます。
if (Request.Cookies["UserSettings"] != null)
{
HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
現時点でSession.Clear()
:
Session
コレクションからすべてのキーと値のペアが削除されます。Session_End
イベントは発生しません。あなたはログアウト時に、このメソッドを使用する場合は、使用する必要がありますSession.Abandon
にメソッドを
Session_End
イベント:
if
実際には機能しないと思います。Cookies["whatever"]
フレームワークでCookieを要求すると、Cookieが存在しない場合は作成されます。
Request
オブジェクトを呼び出すとCookieが作成されるとは思いません。
Response
オブジェクトのクッキーを作成するだけのようです。興味深い:)
Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)
。ここで、サーバーはブラウザにCookieの削除を要求します。存在する場合、ブラウザはそれを削除します。
これは私が使用するものです:
private void ExpireAllCookies()
{
if (HttpContext.Current != null)
{
int cookieCount = HttpContext.Current.Request.Cookies.Count;
for (var i = 0; i < cookieCount; i++)
{
var cookie = HttpContext.Current.Request.Cookies[i];
if (cookie != null)
{
var expiredCookie = new HttpCookie(cookie.Name) {
Expires = DateTime.Now.AddDays(-1),
Domain = cookie.Domain
};
HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
}
}
// clear cookies server side
HttpContext.Current.Request.Cookies.Clear();
}
}
他の人が言ったように、Session.Abandonを使用してもSession IDcookieは削除されないことを指摘したいと思います。
セッションを放棄しても、セッションIDCookieはユーザーのブラウザから削除されません。したがって、セッションが破棄されるとすぐに、同じアプリケーションへの新しいリクエストは同じセッションIDを使用しますが、新しいセッション状態インスタンスがあります。同時に、ユーザーが同じDNSドメイン内で別のアプリケーションを開いた場合、1つのアプリケーションからAbandonメソッドが呼び出された後、ユーザーはセッション状態を失うことはありません。
セッションIDを再利用したくない場合があります。そうして、セッションIDを再利用しないことの影響を理解している場合は、次のコード例を使用してセッションを破棄し、セッションIDCookieをクリアします。
Session.Abandon(); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
このコード例は、サーバーからセッション状態をクリアし、セッション状態cookieをnullに設定します。null値は、ブラウザからCookieを効果的にクリアします。
今は2018年なので、ASP.NET Coreには、単純な組み込み関数があります。Cookieを削除するには、次のコードを試してください。
if(Request.Cookies["aa"] != null)
{
Response.Cookies.Delete("aa");
}
return View();
パスワードをCookieとして保存しないでください。Cookieを削除するには、実際にはCookieを変更して期限切れにする必要があります。実際に削除することはできません。つまり、ユーザーのディスクから削除することはできません。
サンプルは次のとおりです。
HttpCookie aCookie;
string cookieName;
int limit = Request.Cookies.Count;
for (int i=0; i<limit; i++)
{
cookieName = Request.Cookies[i].Name;
aCookie = new HttpCookie(cookieName);
aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday
Response.Cookies.Add(aCookie); // overwrite it
}
OPの質問タイトルをすべてのCookieの削除と見なす-「WebサイトのCookieを削除する」
WebのどこかでDaveDomagalaのコードに出くわしました。私はDaveを編集して、Google AnalyticsのCookieも許可しました。これにより、Webサイトで見つかったすべてのCookieがループされ、すべて削除されました。(開発者の観点から-新しいコードを既存のサイトに更新することは、ユーザーがサイトに再度アクセスする際の問題を回避するための良い方法です)。
以下のコードを、最初にCookieを読み取り、必要なデータを保持することと並行して使用します。次に、以下のループですべてをきれいに洗浄した後、Cookieをリセットします。
コード:
int limit = Request.Cookies.Count; //Get the number of cookies and
//use that as the limit.
HttpCookie aCookie; //Instantiate a cookie placeholder
string cookieName;
//Loop through the cookies
for(int i = 0; i < limit; i++)
{
cookieName = Request.Cookies[i].Name; //get the name of the current cookie
aCookie = new HttpCookie(cookieName); //create a new cookie with the same
// name as the one you're deleting
aCookie.Value = ""; //set a blank value to the cookie
aCookie.Expires = DateTime.Now.AddDays(-1); //Setting the expiration date
//in the past deletes the cookie
Response.Cookies.Add(aCookie); //Set the cookie to delete it.
}
追加:GoogleAnalyticsを使用する場合
上記のループ/削除はサイトのすべてのCookieを削除するため、Google Analyticsを使用する場合は、__ utmz Cookieを保持すると、訪問者のアクセス元、使用された検索エンジン、内容を追跡できるので便利です。リンクがクリックされた、使用されたキーワード、およびWebサイトにアクセスしたときの世界のどこにあったか。
したがって、それを維持するには、Cookie名がわかったら、単純なifステートメントをラップします。
...
aCookie = new HttpCookie(cookieName);
if (aCookie.Name != "__utmz")
{
aCookie.Value = ""; //set a blank value to the cookie
aCookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(aCookie);
}
Session.Abandon
ASP.NETセッションCookieはクリアされますが、ここのuserIDのように手動で設定したCookieはクリアされません。そしてCookies["whatever"]
、決してnullではありません。存在しないCookieを要求すると、フレームワークはCookieを作成します。