背景

最近做到一个asp.net项目,项目中保存用户信息用到了cookie,因此,在注销身份的时候,就需要清除掉cookie。

探索过程

我先是试验了这种代码,在没有特殊声明前,代码都是写在Page_Load方法中,

    this.Response.Cookies.Clear();

事实证明,这是木有效果的。。。

然后我想到了我以前看到的书里讲到的,可以通过设置过期时间为过去,以删除cookie,所以我修改了代码:

    foreach (HttpCookie item in this.Response.Cookies)
{
item.Expires = DateTime.Now.AddDays(-1);
}

这样写有效果了,但是发现只是清除了一部分我希望清楚的cookie。。。尼玛!!

然后我就调试检查问题,发现在Response.Cookies的集合里边,并没有全部包括我要清除的cookie,反而是在Request.Cookies集合里边全部包含了,我中间还因此把以上代码中的

Response改写成Request,结果一个没有清楚掉。。。基础不牢的错

好吧,我的目的很简单:

1.找到我要清楚的cookie的key,这个从Request中我可以获取到

2.清楚浏览器cookie,这个我可以通过设置response的Cookie的过期时间为过去时间来达到

头脑里边整理下思路,果断这样写来进行测试了:

    for (int i = 0; i < this.Request.Cookies.Count; i++)
{
this.Response.Cookies[this.Request.Cookies[i].Name].Expires = DateTime.Now.AddDays(-1);
}

结果OK,算是搞定了,想到我是不是应该稍微封装下,以方便以后使用,于是就封装到了一个工具类方法里边,具体请查看下边的代码;

代码

    /// <summary>
/// 清除指定cookie
/// </summary>
/// <param name="contenxt">The contenxt.</param>
/// <param name="cookies">The cookies.</param>
public static void ClearCookies(HttpContext contenxt,params string[] cookies)
{
//清除cookies
foreach (string key in cookies)
{
contenxt.Response.Cookies[key].Expires = DateTime.Now.AddDays(-1);
}
}
/// <summary>
/// 清空所有cookie
/// </summary>
/// <param name="contenxt">The contenxt.</param>
public static void ClearCookiesAll(HttpContext contenxt)
{
//清除cookies
for (int i = 0; i < contenxt.Request.Cookies.Count; i++)
{
contenxt.Response.Cookies[contenxt.Request.Cookies[i].Name].Expires = DateTime.Now.AddDays(-1);
}
}

疑问

最后,其实我还是有疑问的,为什么在Request中可以获取到的cookie,在response中却获取不到了,不知道园子里边有没有大神给分析一下啊。

辞职,敬礼

Asp.Net Cookie的清除的更多相关文章

  1. ASP.NET Cookie(一)--基本应用

    Cookie提供了一种在Web应用程序中存储用户特定信息的方法.例如,当用户访问您的站点时,您可以使用Cookie存储用户首选项或其他信息.当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息 ...

  2. ASP.NET Cookie 概述【转】

    来源:http://msdn.microsoft.com/zh-cn/library/ms178194(VS.80).aspx ASP.NET Cookie 概述 Cookie 提供了一种在 Web ...

  3. 关于cookie的清除

    关于cookie的清除     设置cookie时若指定了目录,那么在删除cookie时也必须指定相同的目录,如此才可以删除之前设置的cookie的值!!!!!!!!!

  4. 【转】asp.net Cookie值中文乱码问题解决方法

    来源:脚本之家.百度空间.网易博客 http://www.jb51.net/article/34055.htm http://hi.baidu.com/honfei http://tianminqia ...

  5. How to secure the ASP.NET_SessionId cookie? 设置ASP.NET_SessionId Secure=true

    How to secure the ASP.NET_SessionId cookie? To add the ; secure suffix to the Set-Cookie http header ...

  6. 微信WebView关闭后本地cookie无法清除问题

    问题背景 在微信WebView下的页面中登录后,关闭WebView返回后再次进入页面,发现登录态还存在,原因是微信不会主动清除cookie以及其他的缓存. 期望是关闭窗口后会清除cookie,重新进入 ...

  7. ASP.NET Cookie是怎么生成的

    ASP.NET Cookie是怎么生成的 可能有人知道Cookie的生成由machineKey有关,machineKey用于决定Cookie生成的算法和密钥,并如果使用多台服务器做负载均衡时,必须指定 ...

  8. ASP.NET Cookie和Session

    Cookie和Session C#在服务器,JS在客户端 客户端验证不能代替服务端验证 Http HTTP属于应用层,HTTP 协议一共有五大特点:1.支持客户/服务器模式;2.简单快速;3.灵活;4 ...

  9. asp.net,cookie,写cookie,取cookie

    Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...

随机推荐

  1. sublime text2注册码

    ----- BEGIN LICENSE ----- Andrew Weber Single User License EA7E-855605 813A03DD 5E4AD9E6 6C0EEB94 BC ...

  2. python 使用dict和set

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...

  3. define

    define('player',['videoplay'],function(videoplay){ var wrap_player = $('#live_SWF'), obj_player = '' ...

  4. Oracle- 查询误删数据

    使用flashback table能恢复误删数据. flashback table CONTAINER_CONTENT to timestamp to_timestamp('2010-06-30 22 ...

  5. Java编程 -- 命名规范

    转自:http://www.hawstein.com/posts/google-java-style.html#Naming 命名约定 5.1 对所有标识符都通用的规则 标识符只能使用ASCII字母和 ...

  6. Finite Difference Method with Mathematica

    Euler's method

  7. 注入限制绕过<转>

    突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“'”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以 ...

  8. metasploit(MSF)终端命令大全

    show exploits   列出metasploit框架中的所有渗透攻击模块. show payloads   列出metasploit框架中的所有攻击载荷. show auxiliary   列 ...

  9. webViewDidFinishLoad因为网页里的重定向,会调用多次,使用web view.isLoading来解决

    我编码如下,但我发现 webViewDidFinishLoad() 会发生若干次. 如何知道 webViewDidFinishLoad() 最后发生吗? iNavigate = ; - (void)w ...

  10. BAE3.0还不支持本地写入文件

    BAE3.0对比2.0做了很大的改动,对于安装应用方面也方便了很多,普通的应用表面上(下文就是讲为什么说表面上)不需要做什么适配.比如wp博客,直接修改wp-config.php,把数据库信息填一下就 ...