我正在使用 JavaScript 处理 cookie,以便在我的 asp.net Web 应用程序中存储一些值。
我使用 document.cookie
来保存一些值(转换为长字符串)。但我希望该值可以在我的应用程序中的所有页面上访问。
当我尝试从不同页面获取该值时,我会获取与当前 URL 中的文档相关的值。
简而言之,我将 cookie 中的值保存在 http://myapp/doc1.aspx
中,并希望在 http://myapp/doc2.aspx
中检索它>
那么 document.cookie 是否属于单个文档范围?我如何在整个网站上保存/读取 cookie?
更新
这就是我获取和设置cookie的方式
function getCookie(c_name)
{
try{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
}
catch(e)
{}
return "";
}
function setCookie ( name, value, exp_d)
{
var cookie_string = name + "=" + escape ( value );
if ( exp_d )
{
var exdate=new Date();
var expires = new Date ( exdate.getYear(), exdate.getMonth(), exdate.getDay()+exp_d );
cookie_string += "; expires=" + expires.toGMTString();
}
document.cookie = cookie_string;
}
但是我在不同页面中得到不同的 cookie 值。有什么想法吗?
谢谢。
最佳答案
Cookie 有一个域和一个路径。默认情况下,域将是设置它的域,路径将是根路径,但可以按如下方式覆盖这些:
资源位于http://www.example.net/foo/bar/baz设置 cookie(无论是来自服务器还是客户端 javascript)。
默认情况下,其域名为 www.example.net,路径为/,因此对于 URI 匹配 ://www.example.net/ 的所有资源都可见,其中 * 是一个简单的通配符。
它的域可以设置为 example.net,但不能设置为 example.org - 它只能设置为其子域的域。 (有一些特殊且不完善的规则可以阻止您为 .net 等顶级域名设置 cookie)
它的路径可以设置为/foo/bar/baz或/foo/bar甚至/foo/ba,因为它与简单的子字符串匹配进行比较。如果设置为例如/foo/bar/那么它将对 http://www.example.net/foo/bar/qux 处的资源可见但没有 http://www.example.net/foo/quux/corge
还有安全属性,它将 cookie 限制为 HTTPS 协议(protocol)。
编辑:参见http://www.quirksmode.org/js/cookies.html有关如何实际设置这些属性的详细信息。
关于javascript - 使用 document.cookie 存储的 cookie 是否特定于文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3502384/