zoukankan      html  css  js  c++  java
  • Asp.Net Cookie的清除

    背景

    最近做到一个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中却获取不到了,不知道园子里边有没有大神给分析一下啊。
    辞职,敬礼

  • 相关阅读:
    获取路径的方式
    读取XML文件(XmlNode和XmlElement区别)
    jQuery 选择器大全
    JS中Null与Undefined的区别
    浅谈JS中的!=、== 、!==、===的用法和区别
    sql面试 查找每个班级的前5名学生(取分类数据的前几条数据)
    C#动态方法调用
    C# 匿名对象(匿名类型)、var、动态类型 dynamic——实用之:过滤类属性、字段实用dynamic
    前言2
    2019-1-17 前言 C#高级编程(第11版)
  • 原文地址:https://www.cnblogs.com/stxwork/p/5545236.html
Copyright © 2011-2022 走看看