使用Javascript,我想在每次按下按钮时创建一个带有id“username”的输入字段值的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。这意味着它至少是成功运行,但没有找到任何名为“username”的cookie,即使我刚刚创建它。有人可以帮忙吗?
答案 0 :(得分:2)
你说你正在使用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访问页面。