首页  >  文章  >  后端开发  >  为什么我的'username2”cookie 是空白的,尽管在 PHP 中使用 setcookie() 设置它?

为什么我的'username2”cookie 是空白的,尽管在 PHP 中使用 setcookie() 设置它?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-22 00:15:11457浏览

Why is my 'username2' cookie blank despite setting it using setcookie() in PHP?

通过会话处理对空白 Cookie 进行故障排除

在所提供的 PHP 函数中,用户验证过程包括为“用户名”和“设置 Cookie” username2' 使用 setcookie()。然而,在检索“username2”cookie 时,它​​仍然是空白。此问题可能由多种原因引起。

Cookie 配置不完整

确保整个 setcookie() 配置包含必要的参数:

  • Expires 参数: 以有效格式指定过期时间。提供的代码设置了 365 天的过期时间,但建议的格式是 time() n,其中 n 是秒数。
  • 路径参数: 根据解决方案中的建议,设置path = / 确保 cookie 适用于整个站点,而不仅仅是当前目录。

输出修改

注意 PHP 手册中的警告:“cookies 必须在脚本的任何输出之前发送。”在设置 cookie 之前避免回显,以防止已发送任何标头。在给定的代码中, echo $_COOKIE['username2'];出口();应放在标题之前(“位置:../new.php”);

验证函数优化

validateUser()函数应该仅用于设置会话和重定向,没有任何逻辑或数据库查询。考虑创建一个单独的函数用于用户验证,另一个函数用于设置 cookie。

示例

validateUser() 函数和 cookie 设置的优化版本:

// User validation function
function validateUser($username) {
    session_regenerate_id ();
    $_SESSION['valid'] = 1;
    $_SESSION['username'] = $username;
}

// Cookie setting function
function setCookies($username, $password) {
    setcookie('username', $username, time() + 60 * 60 * 24 * 365, '/');
    setcookie('password', $password, time() + 60 * 60 * 24 * 365, '/');
}

// Function call
if(mysql_num_rows($queryreg) != 0){
    $row = mysql_fetch_array($queryreg,MYSQL_ASSOC);
    $hash = hash('sha256', $row['salt'] . hash('sha256', $password));
    if($hash == $row['password']) {
        if($row['confirm'] == 1){
            setCookies($username, $password);
            validateUser($username);
        }
    }
}

以上是为什么我的'username2”cookie 是空白的,尽管在 PHP 中使用 setcookie() 设置它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn