【问题标题】:Problem with Javascript & CookiesJavascript 和 Cookie 的问题
【发布时间】:2011-07-06 07:07:39
【问题描述】:

使用 Javascript,我想在每次按下按钮时创建一个带有 id 为“用户名”的输入字段的值的 cookie。然后我想读取该 cookie 并将其显示在网站上。虽然我只是尝试这个来测试我对 cookie 的了解,但我现在想知道这个问题的解决方案,因为我的代码不起作用。

我将使用来自 elated.com 的这两个函数:

function set_cookie ( name, value, exp_y, exp_m, exp_d, path, domain, secure )
{
var cookie_string = name + "=" + escape ( value );

if ( exp_y )
{
   var expires = new Date ( exp_y, exp_m, exp_d );
   cookie_string += "; expires=" + expires.toGMTString();
}

if ( path )
    cookie_string += "; path=" + escape ( path );

if ( domain )
    cookie_string += "; domain=" + escape ( domain );

if ( secure )
    cookie_string += "; secure";

document.cookie = cookie_string;




function get_cookie ( cookie_name )
{
var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );

 if ( results )
     return ( unescape ( results[2] ) );
else
    return null;
}

当按钮被按下时,这个函数将会运行:

function Register()
{
var username = document.getElementById("username").value; //Read the input value
set_cookie("username", username, 2012, 12, 23); //Set the cookie
document.write(get_cookie("username")); //Read the cookie
}

每当我尝试运行它时,get_cookie 函数都会返回 null。这意味着它至少可以成功运行,但没有找到任何名为“用户名”的 cookie,即使我刚刚创建了它。有人可以帮忙吗?

【问题讨论】:

  • document.getElementById("username").value的值是多少?
  • 用户在 中输入的内容。
  • 嗯,是的。但是您确定正在设置用户名(在 javascript 中)吗?基本上,usernamevar username = document.getElementById("username").value; 的值是多少?
  • 你的函数对我来说很好,除非值是空字符串
  • 这是您的代码jsfiddle.net/DfkEJ/2 的 jsfiddle。它有效。

标签: javascript html cookies


【解决方案1】:

您说您使用的是 Chrome。 Chrome(和 Chromium)不允许在本地页面上设置或访问 cookie,这是出于安全考虑的慎重决定(请参阅http://code.google.com/p/chromium/issues/detail?id=535#c3)。如果将您发布的代码放到服务器上并发送出去,您发布的代码确实有效,但如果您从本地系统以 file:// URL 的形式打开页面,则无法正常运行。这也是 jsfiddle 起作用的原因。

其他一些浏览器确实允许在本地页面中使用 cookie,因此如果您想在本地尝试使用 JavaScript 和 cookie,您最好尝试其中的一种。 Firefox 允许他们使用预期的行为,尽管他们已经考虑过改变它并且将来可能会这样做。 Chrome 也有一个命令行标志 --enable-file-cookies,您可以在测试时使用它,但他们不建议将其用于日常使用。

您也可以将您的页面放到服务器上并在那里进行测试。本地计算机上的任何一种免费托管服务或Apache 或类似的实例都可以使用。重要的是页面是通过 HTTP 访问的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多