我在login.php中有这段代码
if ( $sth->execute() ) {
$row = $sth->fetch(PDO::FETCH_ASSOC);
if ( $row ) {
var_dump($row); // See below
$_SESSION['login'] = $row['login'];
setcookie('login', $row['login'], time() * 7 * 24 * 60 * 60);
if ( $row['right'] == ACCESS_ADMIN ) {
echo "true"; // true
$_SESSION['right'] = ACCESS_ADMIN;
setcookie('right', $row['login'], time() * 7 * 24 * 60 * 60);
}
}
}
var_dump($row) - array(3)
{
["login"]=> string(6) "phplox"
["password"]=> string(32) "827ccb0eea8a706c4c34a16891f84e7b"
["right"]=> string(5) "admin"
} ?>
<br>
好的,好的。转到index.php。
<?php var_dump($_COOKIE) ?> `// array(1) { ["PHPSESSID"]=> string(26) "o05mr9luc2ok8ieadss4v9mhg0" }`
但是如果
<?php var_dump($_SESSION) ?> //
结果是:
array(3)
{
["request_token"]=> string(32) "335f1dcd4283889f0f2fe602cfa36d71"
["login"]=> string(6) "phplox" ["right"]=> string(5) "admin"
}
答案 0 :(得分:0)
在设置Cookie之前,您无法发送任何输出。 Cookie是通过HTTP标头发送的,因此必须在将任何输出发送到浏览器之前发送它们。在这里,你回应一些东西,然后尝试设置cookie:
echo "true"; // <--- REMOVE THIS
$_SESSION['right'] = ACCESS_ADMIN;
setcookie('right', $row['login'], time() + (7 * 24 * 60 * 60)); // add to the time, don't multiply time()
您还可以检查setcookie()
的返回值,如果已经发送了输出,则返回布尔值false
。
答案 1 :(得分:0)
此:
time() * 7 * 24 * 60 * 60
溢出,因此它包裹int
值并创建一个引用过去的值,因此浏览器不会创建cookie。将其更改为:
time() + 7 * 24 * 60 * 60
此外,正如MrCode所说,除非您使用ob_start()
,否则请勿在发送Cookie之前发送输出。
希望这有帮助