我有一个logout.aspx,在用户点击退出时调用,我想要删除cookie,但它不会这样做...
public partial class LogoutUser : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie cookie;
cookie = Request.Cookies.Get("Basket");
if (cookie == null)
{
cookie = new HttpCookie("Basket");
}
foreach (string item in cookie.Values.AllKeys)
{
Response.Cookies[item].Expires = DateTime.Now.AddDays(-1);
}
cookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies["Basket"].Expires = DateTime.Now.AddYears(-1);
Session.Abandon();
Response.Redirect("~/Default.aspx");
}
}
cookie将值存储在篮子中,但在注销后我仍然可以访问篮子我不知道什么是错的。
答案 0 :(得分:5)
Here is some relevant documentation
我相信你的错误在于这一行:
if (cookie == null)
您正在检查null,而不是检查not null。因此,
HttpCookie cookie;
cookie = Request.Cookies.Get("Basket");
if (cookie != null)
{
cookie = new HttpCookie("Basket");
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
}
Response.Redirect("~/Default.aspx");
应该这样做。
希望这有用。
答案 1 :(得分:1)
可能是这个吗?
默认情况下会回收已放弃或已过期的会话的会话标识符。也就是说,如果做出包括过期或放弃会话的会话标识符的请求,则使用相同的会话标识符启动新会话。您可以通过将sessionState配置元素的 regenerateExpiredSessionId 属性设置为 true 来禁用此功能。有关更多信息,请参阅会话标识符。
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx