【问题标题】:Cannot set cookies in Javascript无法在 Javascript 中设置 cookie
【发布时间】:2011-12-27 15:43:16
【问题描述】:

我有一行非常简单的代码来设置和读取 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>

【问题讨论】:

标签: javascript google-chrome cookies


【解决方案1】:

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

【讨论】:

  • 这就是答案;如果 OP 将其标记为这样,那就太好了。
  • 在 Google Chrome v38 上相同。
  • 这是一个糟糕的答案。感谢您确保事情是这样的。
  • 其实答案很好,我只是说答案背后的实际逻辑是垃圾。
  • 作为 cookie 的替代方案,您可以尝试使用 HTML5 Local Storage,即使通过 file:/// 访问它也可以。
【解决方案2】:

我试图在 Chrome 上保存一个 cookie,但遇到了同样的错误,它会保存。 虽然它在 Firefox 中确实有效,但我问了一位同事,他建议我删除路径和域(我有 cookie 的名称、值、过期、路径和域),突然之间它起作用了。 因此,为了让 cookie 真正保存在 Chrome 中,您只需要 name、value 和 expire。

希望对你有帮助。

例子:

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

【讨论】:

  • 开发人员应该理解做这样的事情的含义,除非他们真的需要一个“正常工作”的解决方案来处理一些家庭作业或相关问题。还有其他 cookie 值可能需要也可能不需要设置。请访问en.wikipedia.org/wiki/HTTP_cookie并了解cookies。
  • 完美的解决方案,这是我找了这么多天的解决方案。
  • @John Castell :感谢上面的解决方案,我也遇到了同样的问题,删除路径和域对我有用,但是我仍然很好奇为什么现在这样有效以及有什么障碍路径和域参数原因。我必须管理我只在 http 协议中遇到问题,即使使用路径和域参数,https 对我来说也能正常工作。
【解决方案3】:

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');

希望这会有所帮助。

干杯, 酷冰沙

【讨论】:

    【解决方案4】:

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

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

    2) 通过右键单击 Computer、单击属性并查找 Computer Name 来获取您的 computer name

    3) 通过访问http://my-computer-name/yourProjectFolder/index.html 在浏览器中访问您的站点,此时creating cookies 应该可以工作。

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

    【讨论】:

    • 我收到“ 拒绝连接”。错误信息。
    【解决方案5】:

    localhost 在 Chrome 中打开页面时,我遇到了同样奇怪的行为

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

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

    【讨论】:

    • 请记住,如果我们使用这种方法,主机名必须以 tld 结尾才能真正欺骗 chrome。
    • 而且,如果您在 cookie 上使用 domain=xxx,请确保您的“本地域”与此匹配。 (例如,如果您正在为 example.com 开发一些东西并因此设置domain=example.com,那么将local.example.com 添加到您的主机文件应该可以。)
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      它对我来说很好,但再次确保您的 JSCookies 是否在浏览器中启用。您应该使用if(document.cookie) 检查您的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

      希望这会有所帮助。

      【讨论】:

      • 谢谢。试过了。并且不起作用。空白的。我知道 javascript 和 cookie 已启用并在我的浏览器上运行。所以我不知道发生了什么。我也没有可以调试的地方..
      • 更改您的浏览器.....在 IE 或 Chrome 或 FF 中尝试。在任何其他浏览器中试一试。也许它会起作用。因为它对我有用,并且您的代码中没有明显的问题。
      • 我尝试过 FF、Chrome 和 Safari(我在 Mac 上开发)。不起作用。无论如何我可以调试发生了什么?
      【解决方案8】:

      改用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>
      

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-29
          • 1970-01-01
          • 2015-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-29
          • 2015-05-20
          相关资源
          最近更新 更多