一、简介
1.查看IE的Cookie文件保存位置:可通过注册表查看HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cookies
2.Cookie是一小段文本信息,他是伴随用户请求在Web服务端和浏览器之间传递信息;
3.Cookie与站点关联,并不是与特定的页面关联,当用户请求不同站点时,各个站点的服务端都有可能像浏览器发送Cookie信息,浏览器分别存储各个站点的Cookie信息;
4.当用户请求站点时,浏览器变会在本地磁盘上查找与该站点(URL)相关联的Cookie信息,如果Cookie存在,浏览器便将该Cookie与页面请求一起发送给服务端;
5.大多数浏览器支持最大为4096字节(4M)的Cookie信息,由于这一限制,最好用Cookie来存储少量信息,如用户ID信息等;
6.大多数浏览器还会限制站点可以再用户计算器上存储Cookie的数量,一般浏览器只允许每个站点存储20个Cookie,还有一些浏览器限制所有站点存储Cookie的总数,通常为300;
7.由于用户可以设置浏览器拒绝接受Cookie,因此应用程序不应绝对依赖于Cookie,如果必须依赖于Cookie,则可以通过检查用户浏览器是否接受Cookie;
8.Cookie通过HttpResponse对象发送到浏览器,创建Cookie时必须制定Name和Value,每个Cookie必须有一个唯一的名称,由于Cookie按名称存储,用两个相同的名称创建Cookie时,会导致其中一个被覆盖;
9.创建Cookie时,如果没有设置有效期,Cookie将不会被保存到用户磁盘时,此时会将Cookie作为用户会话的一部分进行维护,当用户关闭浏览器时,Cookie便会被丢弃;
10.可以通过HttpRequest对象来读取Cookie,但无法通过HttpRequest对象获取返回的Cookie的有效期;
11.由于Cookie在用户的计算机上,因此无法将其直接移除,但是可以通过浏览器来将其删除。将Cookie的有效期设置为早于当前日期的某个日期,浏览器会自动清除已经过期的Cookie;
12.要想知道用户浏览器是否接受Cookie,可以编写一个测试Cookie,然后看是否能获取到该Cookie。
二、事例
/// <summary>
/// 页面基类,所有页面应继承该类
/// </summary>
public class TradePage : System.Web.UI.Page
{
#region Fields
private const string gUserCookie = "USERNAME";
private const string gPasswordCookie = "PASSWORD";
private const string gCheckBox = "CHECKPASSWORD";
#endregion
#region Public Methods
/// <summary>
/// 设置Cookie
/// </summary>
/// <param name="strUser">用户名</param>
/// <param name="strPassword">密码</param>
public void SetCookie(string strUser, string strPassword)
{
//方式一添加Cookie
HttpCookie pUserCookie = new HttpCookie(gUserCookie, strUser);
pUserCookie.Expires = DateTime.Now.AddMonths(1);
HttpCookie pPasswordCookie = new HttpCookie(gPasswordCookie, strPassword);
pPasswordCookie.Expires = DateTime.Now.AddMonths(1);
HttpCookie pCheckCookie = new HttpCookie(gCheckBox, "true");
pCheckCookie.Expires = DateTime.Now.AddMonths(1);
Response.Cookies.Add(pUserCookie);
Response.Cookies.Add(pPasswordCookie);
Response.Cookies.Add(pCheckCookie);
方式二添加Cookie
//HttpCookie pUserInfo = new HttpCookie("USERINFO");
//pUserInfo.Expires = DateTime.Now.AddMonths(1);
将Cookie限制到服务器上的Account文件夹,此时Cookie将只作用于Account文件夹下面的页面
//pUserInfo.Path = "/Account";
将Cookie限制到服务器上的某个域
//pUserInfo.Domain = "support.contoso.com";
//pUserInfo.Values[gUserCookie] = strUser;
//pUserInfo.Values[gPasswordCookie] = strPassword;
//pUserInfo.Values[gCheckBox] = "true";
//Response.Cookies.Add(pUserInfo);
方式三添加Cookie
//Response.Cookies["USERINFO"][gUserCookie] = strUser;
//Response.Cookies["USERINFO"][gPasswordCookie] = strPassword;
//Response.Cookies["USERINFO"][gCheckBox] = "true";
//Response.Cookies["USERINFO"].Expires = DateTime.Now.AddMonths(1);
}
/// <summary>
/// 获取Cookie值
/// </summary>
/// <param name="strUserName">用户名</param>
/// <param name="strPassword">密码</param>
/// <param name="strCheck">是否选中</param>
public void GetCookie(out string strUserName, out string strPassword, out string strCheck)
{
strUserName = Request.Cookies[gUserCookie] == null ? "" : Server.HtmlDecode(Request.Cookies[gUserCookie].Value);
strPassword = Request.Cookies[gPasswordCookie] == null ? "" : Server.HtmlDecode(Request.Cookies[gPasswordCookie].Value);
strCheck = Request.Cookies[gCheckBox] == null ? "false" : Server.HtmlDecode(Request.Cookies[gCheckBox].Value);
SetCookie(strUserName, strPassword);
}
/// <summary>
/// 清除Cookie
/// </summary>
public void ClearCookie()
{
if (Request.Cookies[gUserCookie] != null)
{
Response.Cookies[gUserCookie].Expires = DateTime.Now.AddMonths(-1);
}
if (Request.Cookies[gPasswordCookie] != null)
{
Response.Cookies[gPasswordCookie].Expires = DateTime.Now.AddMonths(-1);
}
if (Request.Cookies[gCheckBox] != null)
{
Response.Cookies[gCheckBox].Expires = DateTime.Now.AddMonths(-1);
}
}
#endregion
}