cookie 小测试

    说起来丢人做了两年的开发,基本上cookie 用的很少 (悲剧啊   悲剧)今天闲着蛋疼,特意回顾了一下cookie  的使用

    回顾定义,cookie 是保存在浏览器的文本段。也就是说,它是不安全的,一般情况下,只存储一些非重要信息(或者也可以加密存储些重要的从数据库中读的信息,避免再次从数据库中读)。紧接着,回顾用法   cookie 可以存储最多4096字节    大多数浏览器设定每个站点最多20个cookie。其次, 浏览器会将cookie  写在 header发送给服务器,但是它吧不会将cookie 的expires发送过去。

    ok,做了一个小例子,来看下效果

局部代码:

<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lb_cookieShow" runat="server"></asp:Label><br />
        <asp:Button ID="btn_addCookie" runat="server" Text = "创建一个cookie" 
            onclick="btn_addCookie_Click" /><br />
        <asp:Button ID="btn_delCookie" runat="server" Text = "删除一个cookie" 
            onclick="btn_delCookie_Click" /><br />
        <asp:Button ID="btn_update" runat="server" Text = "刷新" 
            onclick="btn_update_Click"  /><br />
    </div>
    </form>
</body>
 
.cs 代码
public partial class CookieTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack == false)
            {
                ShowMessage();
            }
        }
 
        private void ShowMessage()
        {
            if (Request.Cookies["cookieTest"] == null)
            {
                this.lb_cookieShow.Text = "cookie已过期或者不存在";
            }
            else
            {
                var cookie = Request.Cookies["cookieTest"];
                this.lb_cookieShow.Text = string.Format("{0},{1},{2},{3}", 
                         cookie.Domain, cookie.Expires, cookie.Value, cookie.Path);
            }
        }
 
        protected void btn_addCookie_Click(object sender, EventArgs e)
        {
            HttpCookie cookie = new HttpCookie("cookieTest");
            cookie.Value = "我是一个cookie";
            cookie.Expires = System.DateTime.Now.AddDays(1);
            this.Response.Cookies.Add(cookie);
            ShowMessage();
        }
 
        protected void btn_delCookie_Click(object sender, EventArgs e)
        {
            if (Request.Cookies["cookieTest"] != null)
            {
                var cookie = Request.Cookies["cookieTest"];
                cookie.Expires = System.DateTime.Now.AddDays(-1);
                Response.Cookies.Add(cookie);
 
                ShowMessage();
            }
   
        }
 
        protected void btn_update_Click(object sender, EventArgs e)
        {
            ShowMessage();
        }
    }

 

首先,读取页面,显示如下信息

image

同时,插件显示  无cookie

image

当点  "创建一个cookie” 的时候,通过Response.cookies.add(cookie) 将cookie放到response 发给客户端。

此处有个很有意思的地方:当我将cookie 写入response的时候,如果再访问Request.Cookies[“CustomCookie”]的时候,它貌似会先在response 里找找看有没有这个cookie.如果有,直接去读response 里的cookie    .

image

注意,此处的expires 读出来是因为此时读的不是request 而是response 了

image

同理,删除cookie 也是

image

这里又有个值得说明的地方:因为cookie是保存在浏览器上的,所以我们不能直接删除它,只能告诉浏览器删除它,而在服务器端让浏览器删除它的唯一办法就是:将其expries 置为比当前时间更早的时间(这样浏览器就会因cookie 过期而删掉它)

posted @ 2009-08-31 14:43  Atpking  阅读(329)  评论(0编辑  收藏  举报