WEB开发之cookie
Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。
用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息。
Cookie 的基本工作原理:
假设在用户请求访问您的网站 www.contoso.com 上的某个页面时,您的应用程序发送给该用户的不仅仅是一个页面,还有一个包含
日期和时间的 Cookie。
用户的浏览器在获得页面的同时还得到了这个 Cookie,并且将它保存在用户硬盘上的某个文件夹中。
以后,如果该用户再次访问您站点上的页面,当该用户输入 URL www.contoso.com 时,浏览器就会在本地硬盘上查找与该 URL 相关
联的 Cookie。
如果该 Cookie 存在,浏览器就将它与页面请求一起发送到您的站点,您的应用程序就能确定该用户上一次访问站点的日期和时间。
您可以根据这些信息向用户发送一条消息,也可以检查过期时间或执行其他有用的功能。
Cookie 是与 Web 站点而不是与具体页面关联的,所以无论用户请求浏览站点中的哪个页面,浏览器和服务器都将交换
www.contoso.com 的 Cookie 信息。
用户访问其他站点时,每个站点都可能会向用户浏览器发送一个 Cookie,而浏览器会将所有这些 Cookie 分别保存。
Cookie最根本的用途是 Cookie 能够帮助 Web 站点保存有关访问者的信息。
更概括地说,Cookie 是一种保持 Web 应用程序连续性(即执行“状态管理”)的方法。
浏览器和 Web 服务器除了在短暂的实际信息交换阶段以外总是断开的,而用户向 Web 服务器发送的每个请求都是单独处理的,与其
他所有请求无关。
然而在大多数情况下,都有必要让 Web 服务器在您请求某个页面时对您进行识别。
例如,购物站点上的 Web 服务器跟踪每个购物者,以便站点能够管理购物车和其他的用户相关信息。
因此 Cookie 的作用就类似于名片,它提供了相关的标识信息,可以帮助应用程序确定如何继续执行。
使用 Cookie 能够达到多种目的,所有这些目的都是为了使 Web 站点记住您。
例如,一个实施民意测验的站点可以简单地利用 Cookie 作为布尔值,表示您的浏览器是否已经参与了投票,从而避免您重复投票;
而那些要求用户登录的站点则可以通过 Cookie 来确定您是否已经登录过,这样您就不必每次都输入凭据。
Cookie 应用的几条限制:
大多数浏览器支持最多可达 4096 字节的 Cookie,如果要将为数不多的几个值保存到用户计算机上,这一空间已经足够大.
大多数浏览器只允许每个站点保存 20 个 Cookie。
如果试图保存更多的 Cookie,则最先保存的 Cookie 就会被删除。
还有些浏览器会对来自所有站点的 Cookie 总数作出限制,这个限制通常为 300 个。
可以利用页面的 Response(英文)属性来编写 Cookie,该属性提供的对象使用户可以将信息添加到由页面向浏览器呈现的信息中。
Response 对象支持一个名为 Cookies(英文)的集合,您可以向其中添加要写入浏览器的 Cookie。
Cookie 是按名称保存的,所以如果您创建了两个名称相同的 Cookie,后保存的那一个将覆盖前一个.
可以通过多种方法把 Cookie 添加到 Response.Cookies 集合中。
Response.Cookies("userName").Value = "mike"
Response.Cookies("userName").Expires = DateTime.Now.AddDays(1)
Dim aCookie As New HttpCookie("lastVisit")
aCookie.Value = DateTime.Now.ToString
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie)
要创建带子键的 Cookie,可以使用用于编写单个 Cookie 的各种语法。
以下示例显示了编写同一 Cookie 的两种不同方法,其中的每个 Cookie 都带有两个子键:
Response.Cookies("userInfo")("userName") = "mike"
Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString
Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1)
Dim aCookie As New HttpCookie("userInfo")
aCookie.Values("userName") = "mike"
aCookie.Values("lastVisit") = DateTime.Now.ToString
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie)
控制 Cookie 有效范围
把 Cookie 的有效范围限制在服务器上的一个文件夹中,实际上这样就将 Cookie 限制到站点上的某个应用程序。
把有效范围设置为某个域,从而允许您指定域中的哪些子域可以访问 Cookie。
要将 Cookie 限制到服务器上的某个文件夹,请按如下方法设置 Cookie 的 Path 属性:
Dim appCookie As New HttpCookie("AppCookie")
appCookie.Value = "written " & Now.ToString
appCookie.Expires = Now.AddDays(1)
appCookie.Path = "/Application1"
Response.Cookies.Add(appCookie)
也可以通过直接设置 Response.Cookies 来编写 Cookie
当浏览器向服务器发送请求时,该服务器的 Cookie 会与请求一起发送。在 ASP.NET 应用程序中,您可以使用 Request 对象来读取
Cookie。Request 对象的结构与 Response 对象的结构基本相同,所以从 Request 对象中读取 Cookie 的方法与向 Response 对象
中写入 Cookie 的方法非常类似。以下示例显示了两种方法,目的都是获取名为“username”的 Cookie 的值并将值显示在 Label
控件中:
If Not Request.Cookies("userName") Is Nothing Then
Label1.Text = Server.HtmlEncode(Request.Cookies("userName").Value)
End If
If Not Request.Cookies("userName") Is Nothing Then
Dim aCookie As HttpCookie = Request.Cookies("userName")
Label1.Text = Server.HtmlEncode(aCookie.Value)
End If
测试 Cookie 是否被接受。
该示例包含两个页面。
在第一个页面中,我编写了一个 Cookie,然后把浏览器重新定向到第二个页面。
第二个页面尝试读取这个 Cookie,转而将浏览器重新定向到第一个页面,并向 URL 添加一个带有测试结果的查询字符串变量。
第一个页面的代码如下:
Sub Page_Load()
If Not Page.IsPostBack Then
If Request.QueryString("AcceptsCookies") Is Nothing Then
Response.Cookies("TestCookie").Value = "ok"
Response.Cookies("TestCookie").Expires = _
DateTime.Now.AddMinutes(1)
Response.Redirect("TestForCookies.aspx?redirect=" & _
Server.UrlEncode(Request.Url.ToString))
Else
labelAcceptsCookies.Text = "接受 Cookie = " & _
Request.QueryString("AcceptsCookies")
End If
End If
End Sub
测试页面可以完全由代码组成,不需要包含控件。以下就是我使用的代码:
Sub Page_Load()
Dim redirect As String = Request.QueryString("redirect")
Dim acceptsCookies As String
' 是否接受 Cookie?
If Request.Cookies("TestCookie") Is Nothing Then
' 没有 Cookie,因此不需要接受
acceptsCookies = 0
Else
acceptsCookies = 1
' 删除测试 Cookie
Response.Cookies("TestCookie").Expires = _
DateTime.Now.AddDays(-1)
End If
Response.Redirect(redirect & "?AcceptsCookies=" & acceptsCookies, _
True)
End Sub
下面看看JS怎么操作Cookie
function setCookie (name, value, expires, path, domain, secure) {
document.cookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
function getCookie(name) {
var cookie = " " + document.cookie;
var search = " " + name + "=";
var setStr = null;
var offset = 0;
var end = 0;
if (cookie.length > 0) {
offset = cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = cookie.indexOf(";", offset)
if (end == -1) {
end = cookie.length;
}
setStr = unescape(cookie.substring(offset, end));
}
}
return(setStr);
}
function getVal(param) {
var myVal = getCookie(param);
alert(myVal);
}
function toggleInfoDisplay (param){
var myVal = getCookie(param);
if (myVal == "none") {
setCookie(param, "block", "Mon, 01-Jan-2001 00:00:00 GMT", "/")
toggleInfoBTN.innerText = "Hide Page Info"
pageInfo.style.display = "block"
}else{
if (myVal == "block") {
setCookie(param, "none", "Mon, 01-Jan-2001 00:00:00 GMT", "/")
toggleInfoBTN.innerText = "Show Page Info"
pageInfo.style.display = "none"
}
}
}
function cookieINIT (param) {
var cookieVal = getCookie(param);
if (cookieVal == null) {
setCookie(param, "block", "Mon, 01-Jan-2001 00:00:00 GMT", "/")
}
}
出处:http://bober.cnblogs.com/
CARE健康网: http://www.aicareyou.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号