Cookie的格式及组成、页⾯间传参实例
做项⽬需要页⾯间参数传递,搜索了⼀下⽹上的回复,发现可以⽤cookie解决,借此学习cookie的格式及组成:
Cookie由变量名和值组成,类似Javascript变量。其属性⾥既有标准的Cookie变量,也有⽤户⾃⼰创建的变量,属性中变量是⽤“变量=值”形式来保存。
  根据Netscape公司的规定,Cookie格式如下:
  Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
  NAME=VALUE:
  这是每⼀个Cookie均必须有的部分。NAME是该Cookie的名称,VALUE是该Cookie的值。在字符串“NAME=VALUE”中,不含分号、逗号和空格等字符。
  Expires=DATE:Expires变量是⼀个只写变量,它确定了Cookie有效终⽌⽇期。该属性值DATE必须以特定的格式来书写:星期
31省新增24例输入
⼏,DD-MM-YY HH:MM:SS GMT,GMT表⽰这是格林尼治时间。反之,不以这样的格式来书写,系统将⽆法识别。该变量可省,如果缺省时,则Cookie的属性值不会保存在⽤户的硬盘中,⽽仅仅保存在内存当中,Cookie⽂件将随着浏览器的关闭⽽⾃动消失。
  Domain=DOMAIN-NAME:Domain该变量是⼀个只写变量,它确定了哪些Internet域中的Web服务器可读取浏览器所存取的Cookie,即只有来⾃这个域的页⾯才可以使⽤Cookie中的信息。这项设置是可选的,如果缺省时,设置Cookie的属性值为该Web服务器的域名。
  Path=PATH:Path属性定义了Web服务器上哪些路径下的页⾯可获取服务器设置的Cookie。⼀般如果⽤户输⼊的URL中的路径部分从第⼀个字符开始包含Path属性所定义的字符串,浏览器就认为通过检查。如果Path属性的值为“/”,则Web服务器上所有的WWW资源均可读取该Cookie。同样该项设置是可选的,如果缺省时,则Path的属性值为Web服务器传给浏览器的资源的路径名。
  可以看出我们借助对Domain和Path两个变量的设置,即可有效地控制Cookie⽂件被访问的范围。
  Secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie。当前这种协议只有⼀种,即为HTTPS。
下⾯是在⽹上学习⼀番后得到的总结(如有纰漏请指正):
1.domain表⽰的是cookie所在的域,默认为请求的地址,如⽹址为st/test/test.aspx,那么domain默认为st。⽽跨域访问,如域A为t1.test,域B为t
为.test;如果要在域A⽣产⼀个令域A不能访问⽽域B能访问的cookie就要将该cookie的domain设置为t2.test。
2.path表⽰cookie所在的⽬录,asp默认为/,就是根⽬录。在同⼀个服务器上有⽬录如下:/test/,/test/cd/,/test/dd/,现设⼀个cookie1的path为/test/,cookie2的path为/test/cd/,那么test下的所有页⾯都可以访问到cookie1,⽽/test/和/test/dd/的⼦页⾯不能访问cookie2。这是因为cookie能让其path路径下的页⾯访问。
3.浏览器会将domain和path都相同的cookie保存在⼀个⽂件⾥,cookie间⽤*隔开。
4.含值键值对的cookie:以前⼀直⽤的是nam=value单键值对的cookie,⼀说到含多个⼦键值对的就蒙了。现在总算弄清楚了。含多个⼦键值对的cookie格式是name=key1=value1&key2=value2。可以理解为单键值对的值保存⼀个⾃定义的多键值字符串,其中的键值对分割符为&,当然可以⾃定义⼀个分隔符,但⽤asp获取时是以&为分割符。
页⾯传参实例:
使⽤Cookie传递参数,a页⾯保存Cookie,b页⾯读取,代码如下:
a页⾯;
1 <html>
2 <head>
3 <title>a</title>
4 <style type="text/css">
5 * {margin:0}
6 body {text-align:center;min-width:760px}
7 div {padding:3px 3px 3px 3px}
8 #main {width:720px;margin:0 auto;text-align:left;margin-top:30px}
9 #main div span {width:50px}
10 </style>
11
12 <script type="text/javascript">
13/***
14* @param {string} cookieName Cookie名称
15* @param {string} cookieValue Cookie值
16* @param {number} nDays Cookie过期天数
17*/
18function SetCookie(cookieName,cookieValue,nDays) {
19/*当前⽇期*/
20var today = new Date();
21/*Cookie过期时间*/
22var expire = new Date();
23/*如果未设置nDays参数或者nDays为0,取默认值1*/
24if(nDays == null || nDays == 0) nDays = 1;
25/*计算Cookie过期时间*/
26    expire.Time() + 3600000 * 24 * nDays);
27/*设置Cookie值*/
28    kie = cookieName + "=" + escape(cookieValue)
29        + ";expires=" + GMTString();
30 }
31function login() {
32var username = $("user").value;
33var password = $("pass").value;
34/*是否选中7天内⽆需登录*/
35var save = $("save").checked;
36if(username=="abc" && password=="abc") {
37if(save) SetCookie("username",username,7);
38else SetCookie("username",username,1);
39/*跳转到ex8.html页⾯*/
40        document.location = "b.htm";
41    } else {
42        alert("⽤户名或密码错误!");
43    }
44 }
45function $(id) {
ElementById(id);
47 }
48 </script>
49 </head>
50 <body>
51    <div id="main">
52        <div><span>⽤户名:</span><input type="text" id="user" /></div>
53        <div><span>密码:</span><input type="password" id="pass" /></div>
54        <div>
55            <input type="checkbox" id="save" />
56            7天内⽆需登录
57            <input type="button" onclick="login()" value="登录" />
58        </div>
59    </div>
60 </body>
61 </html>
View Code
b页⾯:
1 <html>
2 <head>
3 <title>b</title>
4 <script type="text/javascript">
5/***
6*读取指定的Cookie值
7*@param {string} cookieName Cookie名称
8*/
9function ReadCookie(cookieName) {
10var theCookie = "" + kie;
11var ind = theCookie.indexOf(cookieName);
12if(ind==-1 || cookieName=="") return "";
13var ind1 = theCookie.indexOf(';',ind);
14if(ind1==-1) ind1 = theCookie.length;
15/*读取Cookie值*/
16return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
17 }
18
19function $(id) {
ElementById(id);
21 }
22
23function init() {
24var username = ReadCookie("username");
25if(username && username.length>0) {
26        $("msg").innerHTML = "<h1>欢迎光临," + username + "!</h1>";
27    } else {
28        $("msg").innerHTML = "<a href='a.htm'>请登录</a>";
29    }
30 }
31 </script>
32 </head>
33 <body onload="init()">
34    <div id="msg"></div>
35 </body>
36 </html>
View Code