0

我现在快疯了,我花了一天时间做一些不应该花费的事情。

我在我的compoundjs 站点(在服务器上)上执行以下操作

   var cookie = req.cookies.my_user;
   if(!cookie){
       console.log("not user");
       res.cookie('my_user',  user._id, {maxAge: 900000, httpOnly: false });
   }

我以 localhost:3000 的身份运行该站点

当我从某个页面运行以下书签时,我无法控制

var link = document.createElement("link");
link.type = "text/css";
link.rel = "stylesheet";
link.href =  "//localhost:3000/bookmarklet/bookmarklet.css";
var head = document.getElementsByTagName("head"); 
head[0].appendChild(link);
var script = document.createElement('script');
script.src = "//localhost:3000/bookmarklet/bookmarklet.js";
head[0].appendChild(script);

在bookmarklet.js里面我做

console.log(document.cookie);

我没有我设置的 cookie。

显然我应该可以访问,因为脚本是从与我的 cookie 设置相同的域提供的。

我查看从该页面提供的实际 html 文档并打开控制台并执行 console.log(document.cookie) 我看到了我的 cookie,但如果我在写入文档的 javascript 内部执行,则看不到。

换句话说,它的行为就好像它是我设置的会话 cookie,即使它不应该是我理解的那样。

4

2 回答 2

0

我认为您设置 cookie 的方式一定有问题......我建议您使用像这样的 cookie 库 (如果您已经在使用 jQuery),这样您就可以像这样设置 cookie:

$.setCookie("key","value",7); // expires in one week
Cookie = $.getCookie("key"); // it gets you cookie
$.removeCookie("key"); // to remove your cookie

您还有许多其他选项可以处理 cookie,例如获取所有 cookie 或清除所有 cookie 等等......

于 2014-07-21T14:53:19.160 回答
0

显然我应该可以访问,因为脚本是从与我的 cookie 设置相同的域提供的。

也许不是那么明显。脚本使用加载它们的页面的权限运行,而不是加载它们的位置。也就是说,提供脚本的域是无关紧要的——唯一重要的位置是浏览器位置栏中的位置(或者名义上的位置栏,如果它是一个框架)。

于 2014-07-22T04:44:49.487 回答