无法在Javascript中设置Cookie

时间:2011-11-12 14:43:20

标签: javascript google-chrome cookies

我有一行非常简单的代码来设置和读取cookie。我一直为我的cookie获得空值,并且不明白为什么。我启用了cookie并且知道cookie可以在浏览器上运行。

<HTML>
    <HEAD>
        <TITLE>Hello World</TITLE>
    </HEAD>
    <BODY>
        <SCRIPT type="text/javascript">
            document.cookie = "ding=dong";
        </SCRIPT>
        <script type="text/javascript">
            alert(document.cookie);
        </script>
    </BODY>
</HTML>

9 个答案:

答案 0 :(得分:104)

最近我偶然发现了类似的问题。我的脚本无法在Chromium中存储cookie,尽管它在所有其他主流浏览器上运行良好。经过一些谷歌搜索后发现Chrome忽略了本地页面的cookie。我将页面上传到远程服务器代码后神奇地开始工作。

答案 1 :(得分:6)

Chrome拒绝文件Cookie。要使程序正常工作,您必须在其他浏览器中尝试或将其上传到远程服务器。另外,你的setcookie和getcookie的代码本质上是错误的。尝试使用它来设置你的cookie:

function setCookie(name,value,expires){
   document.cookie = name + "=" + value + ((expires==null) ? "" : ";expires=" + expires.toGMTString())
}

用法示例:

var expirydate=new Date();
expirydate.setTime( expirydate.getTime()+(100*60*60*24*100) )
setCookie('cookiename','cookiedata',expirydate)
// expirydate being a variable with the expiry date in it
// the one i have set for your convenience expires in 10 days

这是为了获取你的cookie:

function getCookie(name) {
   var cookieName = name + "="
   var docCookie = document.cookie
   var cookieStart
   var end

   if (docCookie.length>0) {
      cookieStart = docCookie.indexOf(cookieName)
      if (cookieStart != -1) {
         cookieStart = cookieStart + cookieName.length
         end = docCookie.indexOf(";",cookieStart)
         if (end == -1) {
            end = docCookie.length
         }
         return unescape(docCookie.substring(cookieStart,end))
      }
   }
   return false
}

用法示例:

getCookie('cookiename');

希望这有帮助。

干杯, CoolSmoothie

答案 2 :(得分:5)

我尝试在Chrome上保存一个Cookie并遇到同样的错误,它会保存。 虽然它确实在Firefox中工作,所以我问了一个同事,他建议我带走路径和域名(我有cookie的名称,值,过期,路径和域名),突然间它起作用了。 因此,只是为了让cookie实际保存在Chrome中,您只需要名称,值和过期。

希望它有所帮助。

示例:

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+";";
}

答案 3 :(得分:2)

localhost

打开Chrome页面时,我会遇到同样奇怪的行为

当我在hosts文件中映射同一页面并通过映射名称打开同一页面时,将恢复正常的cookie功能。

  1. 以管理员身份打开您的主机文件。 (通常是c:\windows\system32\drivers\etc\hosts
  2. 127.0.0.1 localhostdevelopment.com或类似内容添加到主机文件的末尾
  3. 保存您的主机文件(如果您没有以管理员身份打开文件,将被拒绝)
  4. 转到Chrome中的http://localhostdevelopment.com/(或其他任何名称)。
  5. 请享受您的Cookie正常运作。

答案 4 :(得分:2)

使用chrome,您无法在本地网站上创建Cookie ,因此您需要通过执行以下操作诱骗您的浏览器认为此网站不是本地网站:

1)将网站的根目录放入C:\inetpub\wwwroot,(所以它看起来像C:\inetpub\wwwroot\yourProjectFolder

2)右键点击computer name,点击属性,然后查找Computer

,即可获取Computer Name

3)访问http://my-computer-name/yourProjectFolder/index.html访问您的网站,creating cookies应该可以使用{{1}}。

请注意我在计算机名称中使用破折号,而不是下划线

答案 5 :(得分:2)

Chrome不会存储从本地文件系统加载的页面中的Cookie。例如:file:/// C:/ User

答案 6 :(得分:1)

它适用于我,但请再次确认您的JSCookies是否已在浏览器中启用。您应该使用if(document.cookie)检查cookie是否设置正确,然后您可以更轻松地调试问题所在。也许你的饼干写得不好。请考虑以下代码。

编写Cookie

使用以下代码编写Cookie:

<script language="JavaScript">
 cookie_name = "Basic_Cookie";
 function write_cookie() {
 if(document.cookie) {
 index = document.cookie.indexOf(cookie_name);
 } else {
 index = -1;
 }

 if (index == -1) {
 document.cookie=cookie_name+"=1; expires=Wednesday, 01-Aug-2040 08:00:00 GMT";
 } else {
 countbegin = (document.cookie.indexOf("=", index) + 1);
 countend = document.cookie.indexOf(";", index);
 if (countend == -1) {
 countend = document.cookie.length;
 }
 count = eval(document.cookie.substring(countbegin, countend)) + 1;
 document.cookie=cookie_name+"="+count+"; expires=Wednesday, 01-Aug-2040 08:00:00 GMT";
 }
 }
 </script>

阅读Cookie

一旦您编写了cookie,就需要阅读它才能使用它。使用此脚本读取您的cookie:

<script language="JavaScript">
 function gettimes() {
 if(document.cookie) {
 index = document.cookie.indexOf(cookie_name);
 if (index != -1) {
 countbegin = (document.cookie.indexOf("=", index) + 1);
 countend = document.cookie.indexOf(";", index);
 if (countend == -1) {
 countend = document.cookie.length;
 }
 count = document.cookie.substring(countbegin, countend);
 if (count == 1) {
 return (count+" time");
 } else {
 return (count+" times");
 }
 }
 }
 return ("0 times");
 }
 </script>

在链接中调用Cookie

当有人点击HTML正文中包含此代码的链接时设置您的Cookie:

<script language="javascript">document.write(gettimes());</script>

参考:Simple Cookie Read & Write

希望这有帮助。

答案 7 :(得分:0)

只需将环回网络接口的URL更改为LAN的NIC地址即可完成工作,例如

http://localhost:8080 -> http://192.168.1.15:8080 

答案 8 :(得分:-1)

改为使用HTML5 Local Storage:-

<HTML>
    <HEAD>
        <TITLE>Hello World</TITLE>
    </HEAD>
    <BODY>
        <SCRIPT type="text/javascript">
            localStorage.setItem("myCookie", "ding=dong");
        </SCRIPT>
        <script type="text/javascript">
            alert(localStorage.getItem("myCookie"));
        </script>
    </BODY>
</HTML>