Chrome扩展程序:如何在Chrome扩展程序中设置持久cookie?

16

我在进行Chrome扩展开发,需要通过我的扩展设置cookie值。

我已经通过以下方式设置了cookie:

chrome.cookies.set({ url: "http://example.com/", name: "CookieVar", value: "123" });

但是当我关闭浏览器时,数据将会丢失,因此我需要使用它

chrome.cookies.set({ url: "http://example.com/", name: "CookieVar", value: "123", expirationDate: 3600 });

但是从这里我无法看到Cookie的信息,不知道有没有遗漏什么。


您是否已按照此文档manifest.json中设置了权限? - Jimmy Sawczuk
是的,我已经做到了......如果我没有设置过期日期,那么Cookie就可以正常工作。 - Yashwant Kumar Sahu
将上述代码添加到background.js中,只有这样才能正常工作。 - Java4you
2个回答

8
看起来你的过期日期是1970年1月1日01:00(3600等于UNIX纪元后的1小时)。因此,你的cookie会被删除,因为它的过期日期已经过去了。
你需要为你的cookie提供适当的过期日期。在文档中,expirationDate被定义为:

cookie的过期日期,以自UNIX纪元以来的秒数表示

为了相对于当前时间设置cookie,你需要将秒数添加到(new Date().getTime() / 1000)中,就像@pickled建议的那样。

我已经尝试了以下代码:chrome.cookies.set({ url: "http://example.com/", name: "CookieVar", value: "123", expirationDate: 3600 });但是它对我仍然不起作用。 - Yashwant Kumar Sahu
Berk的评论仍然适用; 您将到期时间设置为时代之后一小时,即1970年1月1日上午1:00:00 GMT - Jimmy Sawczuk
@Jimmy Sawczuk 抱歉,我无法理解您的意思,请您解释一下。根据http://code.google.com/chrome/extensions/cookies.html的说明,我已经在代码中传递了整数值。 - Yashwant Kumar Sahu
问题在于你假设整数是相对于设置 cookie 的时间的;实际上并不是这样。所以,要将过期日期设置为从现在开始的一小时后,你需要将其设置为 <now_timestamp> + 3600,或者如果我现在设置 cookie 的话,就是 1313506823 + 3600 - Jimmy Sawczuk

7

如果您不设置过期日期(expirationDate)的值,则cookie将在用户关闭浏览器时过期。

如果您设置了过期日期,则必须为当前时间+到期秒数。例如:

{expirationDate: (new Date().getTime()/1000) + 3600}

将其设置为当前时间加3600秒,即一个小时后。

您将其设置为基本UNIX时间之后的3600秒,这是1970年的开始,因此它立即过期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接