如何在setcookie()中使用变量?

时间:2009-03-15 21:36:44

标签: php session cookies

我想将用户设置的变量传递给setcookie函数。 我想让用户更改网站某些部分的颜色。到目前为止,有关颜色的信息将通过$_SESSION['colorcode']发送到服务器,我想将其添加到setcookie,因此当用户下次登录该网站时,他/她的颜色就在那里。 我有这个代码:

setcookie(
    'colorcode',
    $_SESSION['colorcode'],
    time() + 60 * 60 * 24 * 30,
    '',
    '',
    false,
    true
);

我想在cookie中保存变量的值,但它只适用于会话。 怎么了?如何做到这样,当用户登录时颜色是否存在?我正在寻找另一种方式,而不是将其存储在数据库或文件中。

4 个答案:

答案 0 :(得分:1)

您是否在下一个会话开始时回读了cookie中的值?设置cookie看起来不错,但我认为最后的参数可以省略。

setcookie("colorcode", $_SESSION['colorcode'], time()+3600*24*30, '/');

甚至路径('/')也许是可选的。但这只会设置cookie。当用户下次返回您的站点时,您必须重新读取数据。

if ( !isset($_SESSION['colorcode']) and isset($_COOKIE['colorcode']) ) {
    if ( preg_match('/^#?[0-9a-fA-F]{6}$/', $_COOKIE['colorcode']) ) {
        $_SESSION['colorcode'] = $_COOKIE['colorcode'];
    } else {
        // bad value... delete cookie if you like
    }
}

如果会话中没有colorcode但cookie值存在,则验证数据,如果它是有效的6位十六进制颜色代码,则将值插入会话中。验证是必要的,因为cookie是来自用户的数据,因此可能是恶意的。

答案 1 :(得分:0)

尝试检查一下:

setcookie('colorcode',$_SESSION['colorcode'],time()+60*60*24*30);

答案 2 :(得分:0)

这应该可以正常工作:

setcookie("colorcode",$_SESSION['colorcode'],time()+60*60*24*30); 

我想你只需要在标题中输出它就可以了:

  

setcookie()定义了一个cookie   与HTTP的其余部分一起发送   头。像其他标题,饼干   必须在任何输出之前发送   你的脚本(这是一个协议   限制)。这需要你   在此之前调用此函数   任何输出,包括和    标签以及任何空格。

你得到错误吗?

答案 3 :(得分:0)

由于cookie相关功能(setcookie(),...)与HTTP标头一起使用,您应该在将任何输出发送到客户端之前使用它们。但这并不意味着这些函数应出现在代码的开头。只是确保没有发送输出。甚至是文件开头的单个空格字符