【问题标题】:how to use variable in setcookie()?如何在 setcookie() 中使用变量?
【发布时间】:2010-10-13 12:16:31
【问题描述】:

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

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

我想将变量的值保存在 cookie 中,但它仅适用于会话。 怎么了?怎么做才能使用户登录时出现颜色?我正在寻找另一种方式,而不是将其存储在数据库或文件中。

【问题讨论】:

  • 你是否在每个请求上都设置了这个cookie?如果是这样,您是否考虑过 $_SESSION['colorcode'] 可能未设置(或为空)?

标签: php session cookies


【解决方案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 是来自用户的数据,因此可能是恶意的。

【讨论】:

    【解决方案2】:

    这应该可以正常工作:

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

    只是让你在标题中输出它,我猜:

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

    你有错误吗?

    【讨论】:

    • 没有错误。 cookie 必须是脚本中的第一行还是我可以在它的前面? :
    • session_start 必须完全首先在进行任何输出之前制作 cookie,简而言之,在任何回显或打印之前
    【解决方案3】:

    试着检查一下:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-17
        • 1970-01-01
        • 2011-10-04
        相关资源
        最近更新 更多