ในเว็บไซต์ของฉันเมื่อผู้ใช้คลิกที่ปุ่ม "ออกจากระบบ" โหลดหน้าเว็บ Logout.aspx Session.Clear()
ด้วยรหัส
ใน ASP.NET/C# สิ่งนี้ล้างคุกกี้ทั้งหมดหรือไม่ หรือมีรหัสอื่นที่ต้องเพิ่มเพื่อลบคุกกี้ทั้งหมดในเว็บไซต์ของฉันหรือไม่?
ในเว็บไซต์ของฉันเมื่อผู้ใช้คลิกที่ปุ่ม "ออกจากระบบ" โหลดหน้าเว็บ Logout.aspx Session.Clear()
ด้วยรหัส
ใน ASP.NET/C# สิ่งนี้ล้างคุกกี้ทั้งหมดหรือไม่ หรือมีรหัสอื่นที่ต้องเพิ่มเพื่อลบคุกกี้ทั้งหมดในเว็บไซต์ของฉันหรือไม่?
คำตอบ:
ลองอะไรแบบนั้น:
if (Request.Cookies["userId"] != null)
{
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);
}
แต่ก็ยังสมเหตุสมผลที่จะใช้
Session.Abandon();
นอกจากนี้ในหลาย ๆ สถานการณ์
Cookies["whatever"]
คืนค่าว่างเมื่อคุกกี้ไม่มีอยู่จริง! ฉันรู้ว่านี่เป็นความคิดเห็นเก่า แต่ฉันไม่ต้องการให้ผู้อ่านคนอื่นเข้าใจผิดจากความคิดเห็นนี้
Expires
ไม่ได้ตั้งค่าDateTime.MinValue
เป็นเพราะจะทำให้คุกกี้หมดอายุเซสชันซึ่งหมายความว่าจะรอจนกว่าเบราว์เซอร์ / แท็บ (ขึ้นอยู่กับเบราว์เซอร์) ก่อนที่จะลบคุกกี้
ไม่สามารถทำความสะอาดคุกกี้ได้โดยการตั้งค่าวันหมดอายุสำหรับแต่ละคุกกี้เท่านั้น
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"]
เฟรมเวิร์กจะสร้างคุกกี้หากไม่มีอยู่
Request
วัตถุ
Response
วัตถุเท่านั้น น่าสนใจ :)
Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)
เดียว ที่นี่เซิร์ฟเวอร์จะขอให้เบราว์เซอร์ลบคุกกี้ เบราว์เซอร์จะลบออกหากมีอยู่
นี่คือสิ่งที่ฉันใช้:
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();
}
}
น่าเสียดายสำหรับฉันการตั้งค่า "หมดอายุ" ไม่ได้ผลเสมอไป คุกกี้ไม่ได้รับผลกระทบ
รหัสนี้ใช้ได้ผลสำหรับฉัน:
HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
ที่"ASP.NET_SessionId"
เป็นชื่อของคุกกี้ สิ่งนี้ไม่ได้ลบคุกกี้จริงๆ แต่แทนที่ด้วยคุกกี้เปล่าซึ่งอยู่ใกล้พอสำหรับฉัน
ฉันแค่ต้องการชี้ให้เห็นว่าคุกกี้ Session ID ไม่ได้ถูกลบออกเมื่อใช้ Session.Abandon ตามที่คนอื่นพูด
เมื่อคุณละทิ้งเซสชันคุกกี้ ID เซสชันจะไม่ถูกลบออกจากเบราว์เซอร์ของผู้ใช้ ดังนั้นทันทีที่เซสชันถูกละทิ้งคำขอใหม่ ๆ ไปยังแอปพลิเคชันเดียวกันจะใช้รหัสเซสชันเดียวกัน แต่จะมีอินสแตนซ์สถานะเซสชันใหม่ ในขณะเดียวกันหากผู้ใช้เปิดแอปพลิเคชันอื่นภายในโดเมน DNS เดียวกันผู้ใช้จะไม่สูญเสียสถานะเซสชันของตนหลังจากที่มีการเรียกเมธอด Abandon จากแอปพลิเคชันหนึ่ง
บางครั้งคุณอาจไม่ต้องการใช้รหัสเซสชันซ้ำ หากคุณทำและหากคุณเข้าใจการแบ่งส่วนของการไม่ใช้รหัสเซสชันซ้ำให้ใช้ตัวอย่างโค้ดต่อไปนี้เพื่อละทิ้งเซสชันและเพื่อล้างคุกกี้รหัสเซสชัน:
Session.Abandon(); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
ตัวอย่างโค้ดนี้จะล้างสถานะเซสชันจากเซิร์ฟเวอร์และตั้งค่าคุกกี้สถานะเซสชันเป็น null ค่า null จะล้างคุกกี้ออกจากเบราว์เซอร์ได้อย่างมีประสิทธิภาพ
ตอนนี้เป็นปี 2018 ดังนั้นใน ASP.NET Core จึงมีฟังก์ชันในตัวแบบตรงไปตรงมา หากต้องการลบคุกกี้ให้ลองใช้รหัสนี้:
if(Request.Cookies["aa"] != null)
{
Response.Cookies.Delete("aa");
}
return View();
คุณไม่ควรเก็บรหัสผ่านเป็นคุกกี้ ในการลบคุกกี้คุณเพียงแค่ต้องแก้ไขและทำให้มันหมดอายุ คุณไม่สามารถลบได้จริง ๆ กล่าวคือลบออกจากดิสก์ของผู้ใช้
นี่คือตัวอย่าง:
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 เป็นการลบคุกกี้ทั้งหมด - "Delete Cookies in website"
ฉันเจอรหัสจาก Dave Domagala บนเว็บที่ไหนสักแห่ง ฉันแก้ไข Dave เพื่ออนุญาตให้ใช้คุกกี้ Google Analytics ด้วย - ซึ่งวนลูปผ่านคุกกี้ทั้งหมดที่พบในเว็บไซต์และลบออกทั้งหมด (จากมุมมองของนักพัฒนาซอฟต์แวร์ - การอัปเดตโค้ดใหม่ลงในไซต์ที่มีอยู่ถือเป็นสิ่งที่ดีในการหลีกเลี่ยงปัญหาที่ผู้ใช้กลับมาเยี่ยมชมไซต์อีกครั้ง)
ฉันใช้รหัสด้านล่างควบคู่กับการอ่านคุกกี้ก่อนโดยเก็บข้อมูลที่จำเป็นใด ๆ จากนั้นรีเซ็ตคุกกี้หลังจากล้างทุกอย่างให้สะอาดด้วยลูปด้านล่าง
รหัส:
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.
}
เพิ่มเติม: หากคุณใช้ Google Analytics
การวนรอบ / ลบข้างต้นจะลบคุกกี้ทั้งหมดสำหรับไซต์ดังนั้นหากคุณใช้ Google Analytics - อาจเป็นประโยชน์ที่จะยึดคุกกี้ __utmz ไว้เนื่องจากคุกกี้นี้จะติดตามว่าผู้เยี่ยมชมมาจากไหนใช้เครื่องมือค้นหาอะไร ลิงค์ถูกคลิกใช้คีย์เวิร์ดอะไรและอยู่ที่ไหนในโลกเมื่อมีการเข้าถึงเว็บไซต์ของคุณ
ดังนั้นเพื่อเก็บไว้ให้ห่อคำสั่ง 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);
}
แม้ว่านี่จะเป็นกระทู้เก่า แต่ฉันคิดว่ามีใครยังคงค้นหาวิธีแก้ปัญหาในอนาคต
HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);
นั่นคือเคล็ดลับสำหรับฉัน
Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)
คุณต้องกำหนดวันหมดอายุเพื่อลบคุกกี้
Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));
สิ่งนี้จะไม่ทำให้เกิดข้อยกเว้นหากไม่มีคุกกี้
Session.Abandon
จะล้างคุกกี้เซสชัน ASP.NET แต่ไม่ใช่คุกกี้ที่คุณตั้งค่าด้วยตนเองเช่น userID ที่นี่ และCookies["whatever"]
ไม่เคยเป็นโมฆะ เฟรมเวิร์กจะสร้างคุกกี้หากคุณขอคุกกี้ที่ไม่มีอยู่จริง