zoukankan      html  css  js  c++  java
  • Asp.Net的Cookie用法以及注意事项

    在Asp.net中使用Cookie,首先要注意4个问题。

    1.Cookie最大存储量:<= 4k。这个值是由客户端浏览器决定的。

    2.缓存问题。Cookie在客户端有一个缓存时间,比如缓存1天。那么Cookie在本地设置后,在1天之内,打开这个网页,客户端浏览器会自动加载这个Cookie。另外,每次调试程序,也需要手动清空浏览器Cookie缓存,以防止历史Cookie干扰调试。Windows下清空Cookie脚本:http://www.cnblogs.com/xxxteam/archive/2013/04/01/2993594.html 。如果超过缓存日期,

    3.一维Cookie在Asp.net中的操作例子,以及创建、访问与更改时的方向问题。

      3.1 Cookie,第一次创建,是在服务端向客户端发起Response(回应)之前。因此,Cookie应该在Response中创建并设置值:

    1 HttpCookie newCookie = Response.Cookies["CookieSet_Single_1"];
    2 newCookie.Value = "CookieSet_Single_1_Value1";
    3 newCookie.HttpOnly = true;
    4 newCookie.Expires = DateTime.Now.AddDays(1);

            如果此时服务端还未向客户端进行回应,而需要访问Cookie,应该在Response中访问:

    1 string str = Response.Cookies["CookieSet_Single_1"].Value;

      3.2 当服务端向客户端回应后,Cookie就被正式设置到客户端里了。接着,客户端访问服务端,这是Request(请求),因此,服务端要访问Cookie,应该是访问客户端发来的Request中的Cookie,因此,此时访问Cookie,应该是在Request中访问:

    1 string str = Request.Cookies["CookieSet_Single_1"].Value;

            很多人发现ASP.net的Cookie在不同页面中传递时会丢失,就是因为没有弄清这个方向问题,他们第一次在Response中设置Cookie,当客户端再次访问服务端,他们在Response读Cookie,当然读不到。因为此时Cookie在Request里。

      3.3 当Cookie已经在客户端中被设置后,此时,服务端如果需要更改Cookie,那么问题就来了。

          3.3.1 首先我们要明白一个规则,当服务端要创建,或者更新Cookie时,需要把创建或修改的Cookie,设置在Respon里。这样,这个创建或更新操作,才会发给客户端。由于创建操作在之前已经说了,这里我们只谈更新。

          3.3.2 明白了这个规则后,更新一个Cookie要分两步。第一步是把需要更新的Cookie,由Request里,复制到Response里:

    1 Response.Cookies.Add( Request.Cookies["CookieSet_Single_1"] );

                接着,再在Response里,对它进行修改:

    1 Response.Cookies["CookieSet_Single_1"].Value = "NewValue";

                这时,当浏览器接收到服务端的响应后,则会对Cookie进行更改。

      3.4 删除操作。

          3.4.1 根据更改操作的规则,要删除一个操作,首先仍然得把它从Request中,复制到Response中:

    1 Response.Cookies.Add(Request.Cookies["CookieSet_Single_1"]);

          3.4.1 根据更改操作,我们可以把一个值设置为空字符串,以达到“假删除”的目的。但不推荐:

    1 Response.Cookies["CookieSet_Single_1"].Value = "";

          3.4.2 科学的删除操作,是把Cookie的失效时间,设置为过期的时间,比如昨天:

    1 Response.Cookies["CookieSet_Single_1"].Expires = DateTime.Now.AddDays(-1);

       3.5 判断存在性:判断一个值是否存在(如果有删除操作,请保证删除操作不是假删除):

    1 if ( Request.Cookies["CookieSet_Single_1"] != null)
    2 {
    3     Cookie存在
    4 }
    5 else
    6 {
    7     Cookie不存在
    8 }

    4.二维Cookie的操作,基本规则以及操作方向,同于一维操作,因此下面代码不详述方向。

      4.1 增加

    1 HttpCookie newCookie = Response.Cookies["CookieSet_Single_1"];
    2 newCookie.Values.Add("Key1", "Value1");
    3 newCookie.Values.Add("Key2", "Value2");
    4 newCookie.HttpOnly = true;
    5 newCookie.Expires = DateTime.Now.AddDays(1);

      4.2 访问

    1 string str = Request.Cookies["CookieSet_Single_1"]["Key1"];

      4.3 修改

    1 Response.Cookies.Add(Request.Cookies["CookieSet_Single_1"]);
    2 Response.Cookies["CookieSet_Single_1"]["Key1"] = "NewValue";

      4.4 整体删除,即删除这个维度。注意,二维Cookie无法在维度内删除某个分支。如果需要删除某个分支,只能使用设置为"null"的假删除。

    1 Response.Cookies.Add(Request.Cookies["CookieSet_Single_1"]);
    2 Response.Cookies["CookieSet_Single_1"].Expires = DateTime.Now.AddDays(-1);

       4.5 判断存在性

          4.5.1 整个维度是否存在

    1 if (Request.Cookies["CookieSet_Single_1"] != null)
    2 {
    3     Cookie存在
    4 }
    5 else
    6 {
    7     Cookie不存在
    8 }

         4.5.2 一个维度中,是否存在某个KeyName的判断:

    1 if (Request.Cookies["CookieSet_Single_1"]["Key1"] == null)
    2 {
    3     Key1分支不存在
    4 }
    5 else
    6 {
    7     Key1分支存在,值为 Request.Cookies["CookieSet_Single_1"]["Key1"];
    8 }
  • 相关阅读:
    android-手势密码
    MS SQL 技巧总结--持续更新
    MySQL 笔记一
    spring 家族
    Java集合
    javaScript
    java 知识点随记
    MySQL 知识点随记
    odoo 权限杂记
    win10 Ubuntu子系统安装&odoo10社区版安装
  • 原文地址:https://www.cnblogs.com/xxxteam/p/2993589.html
Copyright © 2011-2022 走看看