从JavaScript处理浏览器cookie的限制是什么?例如,我可以检查是否启用了Cookie吗?我可以修改或添加来自JavaScript的Cookie吗?
回答
你写一个cookie,并尝试回读:这样,你就会知道,如果启用了Cookie。
是的! Read this excellent article about using cookies with JavaScript
下面是一个摘录的代码示例。
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
至于测试它们是否启用。我喜欢jldupont的回答。
可以使用navigator.cookieEnabled
,但我不知道这是否是所有浏览器都支持。
有关cookie的更多信息,请this
我看看饼干,例如启用?
是的,但不容易为你的想法。 navigator.cookieEnabled
是一个非常普遍的标志,并不完全涵盖你可以在什么情况下设置cookie。
例如,它可能被允许会话cookie,但永久性Cookie阻挡。所以你不知道cookie套装是否会成功,除非你继续尝试,设置一个虚拟document.cookie
,然后阅读document.cookie
以查看它是否成功。
在许多浏览器时持久cookie禁用持久cookie将被降级为一个会话cookie。但不是IE,它会阻止它。您可以尝试通过将持久性和会话cookie设置为document.cookie
并查看是否存在。
W3Schools JavaScript Cookies代码中有一个错误。在功能setCookie方法这一行:
exdate.setDate(exdate.getDate()+expiredays);
javascript日期对象属性:
getDate() - Returns the day of the month (from 1-31)
...
getTime() - Returns the number of milliseconds since midnight Jan 1, 1970
...
getDate() plus the number of days is not going to work. I think it should be something like this:
expire = expiredays * 1000 * 60 * 60 * 24; // convert to milliseconds
var exdate = new Date(today.getTime() + (expire));
在TechPatterns.com Javascript Cookie Script Get Cookie, Set Cookie, Delete Cookie Functions工作做得更好该Cookie库(#1在谷歌搜索结果并不总是最好的)。
我测试了IE8中两个页面的代码,第一个导致我的cookie的过期日期为1/1/2038凌晨1:00。第二个示例中的代码将我的Cookie过期日期设置为从我测试它的时间起,恰好与预期的一样。
这些库似乎还有其他问题(如果cookie包含'='):http://thinkclay.com/technology/add-edit-delete-cookies-with-javascript#comment-712789590 – despot 2012-12-27 12:47:09
有通过JavaScript对有关Cookie操纵怪异模式一个伟大的文章: http://www.quirksmode.org/js/cookies.html
- 1. 我可以修改或扩展ChartJS吗?
- 2. 我可以使用来自php的查询修改ENUM吗?
- 3. 我可以修改Bigcommerce CSS和/或添加基于客户组的横幅吗?
- 4. JavaScript:我可以添加小数吗?
- 5. 我可以添加或减去jQuery值和JavaScript值吗?
- 6. 我可以修改settings.py中的static_url吗?
- 7. 我可以使用geom_text或类似的方法来添加总和而不是修改原始数据框吗?
- 8. 我可以修改RoR CRUD行为吗?
- 9. 可以修改jQuery ajax请求中的cookie值吗?
- 10. 我可以使用JavaScript(用户脚本)修改chrome:// extensions/page吗?
- 11. 可以修改rt.jar吗?
- 12. 可以修改TWTweetComposeViewController吗?
- 13. 我可以使用ConfigurationManager修改自定义配置部分吗?
- 14. 我可以用cookie改进我的PHP登录系统吗?
- 15. 我可以将“便签”添加到mercurial修订版吗?
- 16. 我可以通过添加数字来增加迭代器吗?
- 17. 我可以使用JavaScript来添加不是http网址的书签吗?
- 18. 我可以添加chrome.omnibox.onInputStarted.addListener的建议吗?
- 19. SQLAlchemy Migrate - 我可以将列添加(或修改)到现有表的某个位置吗?
- 20. CSS可以自动添加文本吗?
- 21. 我可以通过添加新索引或如何改进查询来改进此查询吗?
- 22. 我可以修改我的面板的儿童宽度吗?
- 23. 可以配置或修改JQPrint以忽略复选框吗?
- 24. C#HttpClient不会添加来自CookieContainer的Cookie以请求
- 25. 我可以修改字段的值以进行测试吗?
- 26. 我可以修改/删除可滚动div的滚动条吗
- 27. 我可以更改现有cookie的值吗?
- 28. 我可以添加自己的片段到MonoDevelop吗?
- 29. 修改来自LibreOffice Base的表条目,可能吗?
- 30. 我可以使用ssh shell修改我的openshift git repo吗?
有工作的脚本好文章。 – Bratch 2010-10-15 00:32:44
谢谢!非常好的例子。 – 2017-04-27 14:36:52