Cookie
Cookie是存储在客户端的。
如果想自由的传递和读取,用Cookie。
Cookie是和站点相关的,也就是只有存储Cookie的服务器站点才能读取和访问。并且每次向服务器请求的时候除了发送表单参数外,还会将和站点相关的所有Cookie都提交给服务器,是强制性的。Cookie也是保存在浏览器端的,而且浏览器会在每次请求的时候都会把和这个站点相关的Cookie提交到服务器,并且将服务器端返回的Cookie更新回本地数据库,
因此可以将信息保存在Cookie中,然后在服务器端读取、修改。服务器返回数据除了普通的html数据以外,还会返回修改的Cookie,浏览器就把拿到的Cookie值更新本地浏览器的Cookie就可以。看报文。
在服务器端控制Cookie案例,实现记住用户名的功能:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication4.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="submit" name="write" value="写入Cookie" />
<input type="submit" name="read" value="读取Cookie" />
<p>
Cookie的值是:<%=strCookie%>
</p>
</div>
</form>
</body>
</html>
public partial class Default : System.Web.UI.Page
{
public string strCookie = "";
protected void Page_Load(object sender, EventArgs e)
{
string read = Request["read"];
string write = Request["write"];
// 写入Cookie操作
if (!string.IsNullOrEmpty(write))
{
string username = "admin";
// 将Cookie写入到响应。
Response.SetCookie(new HttpCookie("UserName", username));
} // 从Cookie读取值
else if (!string.IsNullOrEmpty(read))
{
// 从客户端请求中读取Cookie
HttpCookie cookie = Request.Cookies["UserName"];
if (cookie != null)
{
strCookie = cookie.Value;
}
}
}
}
设置值的页面:
Response.SetCookie(new HttpCookie("UserName",username));
设置的Cookie值会随着响应报文头一起发送到浏览器(客户端)。
读取值的页面:
username=Request.Cookies["UserName"].Value;
浏览器在请求服务器时,会自动把设置的Cookie随着请求报文头发送到服务器端
服务器端可以从请求报文头中读取到浏览器保存的Cookie值
HttpCookie cookie = new HttpCookie("UserName", username);
// 设置Cookie的过期时间,默认为浏览器的关闭时间。
cookie.Expires = DateTime.Now.AddDays(1);
// 将Cookie写入到响应。
Response.SetCookie(cookie);
Cookie的缺点:
还不能存储过多的信息,机密信息不能存。
Cookie无法跨不同的浏览器。
Cookie是可以被清除的,不能把不能丢的数据存到Cookie中;
Cookie尺寸有限制,一般就是几K,几百K。
不能把不能丢失的数据存储到Cookie中
只能把可有可无的数据存储到Cookie中,如记住用户名。