我想将用户设置的变量传递给setcookie
函数。
我想让用户更改网站某些部分的颜色。到目前为止,有关颜色的信息将通过$_SESSION['colorcode']
发送到服务器,我想将其添加到setcookie
,因此当用户下次登录该网站时,他/她的颜色就在那里。
我有这个代码:
setcookie(
'colorcode',
$_SESSION['colorcode'],
time() + 60 * 60 * 24 * 30,
'',
'',
false,
true
);
我想在cookie中保存变量的值,但它只适用于会话。 怎么了?如何做到这样,当用户登录时颜色是否存在?我正在寻找另一种方式,而不是将其存储在数据库或文件中。
答案 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标头一起使用,您应该在将任何输出发送到客户端之前使用它们。但这并不意味着这些函数应出现在代码的开头。只是确保没有发送输出。甚至是文件开头的单个空格字符