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();
}
}
首先,读取页面,显示如下信息
同时,插件显示 无cookie
当点 "创建一个cookie” 的时候,通过Response.cookies.add(cookie) 将cookie放到response 发给客户端。
此处有个很有意思的地方:当我将cookie 写入response的时候,如果再访问Request.Cookies[“CustomCookie”]的时候,它貌似会先在response 里找找看有没有这个cookie.如果有,直接去读response 里的cookie .
注意,此处的expires 读出来是因为此时读的不是request 而是response 了
同理,删除cookie 也是
这里又有个值得说明的地方:因为cookie是保存在浏览器上的,所以我们不能直接删除它,只能告诉浏览器删除它,而在服务器端让浏览器删除它的唯一办法就是:将其expries 置为比当前时间更早的时间(这样浏览器就会因cookie 过期而删掉它)