ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
来源:互联网 发布:淘宝店铺转化率低 编辑:程序博客网 时间:2024/06/06 03:07
ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
版权声明:本文为博主原创文章,未经博主允许不得转载。
http://blog.csdn.net/bdstjk
在web开发中Cookie是必不可少的
.NET自然也有一个强大的Cookie操作类,我们用起来也非常方便,不过在使用中我们会发现一个坑爹的事情Response.Cookies.Remove删除不了Cookie。
例子如下:
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- HttpCookie UserInfo = new HttpCookie("UserInfo");
- UserInfo.Value = "bdstjk";
- Response.Cookies.Add(UserInfo);
- }
- }
- protected void btnRemoveCookie_Click(object sender, EventArgs e)
- {
- Response.Cookies.Remove("UserInfo");
- Response.Write("<script type=\"text/javascript\">alert(\"删除Cookie成功!\");</script>");
- }
- protected void btnCheckCookie_Click(object sender, EventArgs e)
- {
- if (Request.Cookies["UserInfo"] != null)
- {
- Response.Write("Cookie存在,"+Request.Cookies["UserInfo"].Value);
- }
- else
- {
- Response.Write("Cookie不存在");
- }
- }
页面代码:
- <asp:Button ID="btnRemoveCookie" runat="server" Text="删除Cookie"
- onclick="btnRemoveCookie_Click" />
- <asp:Button ID="btnCheckCookie" runat="server" Text="检查Cookie"
- onclick="btnCheckCookie_Click" />
运行代码测试,你会发现,怎么点删除按钮,cookie都存在,如下图:
这是为什么呢?明明是执行了删除cookie的操作,为什么就是删不掉呢?
我们去看看.NET的HttpCookieCollection实现源码
- public void Remove(string name)
- {
- if (this._response != null)
- {
- this._response.BeforeCookieCollectionChange();
- }
- this.RemoveCookie(name);
- if (this._response != null)
- {
- this._response.OnCookieCollectionChange();
- }
- }
这个操作在HttpCookieCollection这个集合里面删除了cookie,当服务器将数据传输到客户端的时候,不会包含这个已经在服务端删除了的Cookie的任何信息,浏览器也就不会对它做任何改变(remove方法只是不让服务器向客户机发送那个被删除的cookie,与此cookie留不留在客户机里无关)。所以cookie删除不掉的情况就出现。
那么如果我们想删除cookie应该怎么做呢?
把删除cookie的代码改成如下语句:
- if (Request.Cookies["UserInfo"] != null)
- {
- Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1);
- }
- Response.Write("<script type=\"text/javascript\">alert(\"删除Cookie成功!\");</script>");
我们再运行程序,测试:
好了。Cookie已经删除。通过设置Cookie的过期时间为负,强制使Cookie过期。就能实现我们需要的效果了。
既然Response.Cookies.Remove没有办法实现我们需要的效果,为什么微软还有留着呢,因为CookieCollection实现ICollection接口,romove是必须实现的方法,尽管它没多大的实际价值。而集合的romove也应该是这样的实现方式,只不过微软在写MSDN的时候,描述得太不清楚了,给我们造成了不小的麻烦。
- 顶
- 5
- 踩
- 0
- 上一篇ASP.NET页面传值之Server.Transfer
- 下一篇ASP.NET用户控件操作ASPX页面(在ASPX页面捕捉用户控件的事件)
- ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
- ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
- ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
- ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
- ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
- Request.Cookies.Remove()无法删除cookie的解决办法 (asp.net)
- Response.Cookies.Remove 无法删除COOKIE的原因
- 【asp.net】常用内置对象(Request,Response、server、Cookies)
- asp.net 中 Request.Cookies 与 Response.Cookies解析
- 没完没了的Cookie,读懂asp.net,asp等web编程中的cookies
- asp.net cookies的用法
- asp.net cookies的使用
- asp.net cookies的使用方法
- ASP.NET-Cookies的用法
- Asp.Net里的Cookies
- Asp.Net之Cookie
- Asp.Net学习之Cookies状态管理(四)
- asp.net页间传值之单值cookies
- c sort
- git 常用命令集锦
- 文本文件大数据查询
- 虚拟函数是否应该被声明仅为private/protected?
- >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
- WideCharToMultiByte和MultiByteToWideChar函数的用法
- 数据结构实验之查找四:二分查找
- Busybox简介
- Maven的settings.xml文件结构之activeProfiles
- java基础学习总结——GUI编程(二)
- 以下数据结构中,()是非线性数据结构
- FFmpeg 基本用法
- How to call a closure that is a class variable?