2

我看到很多人都问过类似的问题,所以如果我重复但我在其他帖子中找不到答案,请原谅。

这只是一个测试页面,在 localhost 上运行。我有一个 HTML 登录页面,将表单数据发送到 PHP 脚本,该脚本正在检查 MySQL 数据库中的详细信息。尝试设置带有结果的 cookie,但无法使其正常工作。

$user = $_POST['USER'];
$pass = $_POST['PASS'];

$res = $con->query("SELECT * FROM users WHERE username = '".$user."' AND password = '".$pass."'");
$row_no = $res->num_rows;
if ($row_no > 0) {
    $row = $res->fetch_assoc();
    $username = $row['username'];
    $password = $row['password'];

    setcookie('cookie1', $user, time() + 3600);

    if (isset($_COOKIE['cookie1'])) {
        echo "cookie set";
    }
    else {
        echo 'cookie not set';
    }

    echo "Hello " . $username . ', your password is ' . $password;
}
else {
    echo "Sorry, either your username or password is wrong";
}

我想我知道该 cookie 在为其设置的页面上不可用,但即使我重新加载该页面,$_COOKIE 变量也是空的。isset脚本部分的结果始终是“cookie not set”。我还尝试将 cookie 上的域设置为“/”。

感激地收到任何帮助。

(ps MySQL部分工作正常)

4

5 回答 5

3

做类似的事情

setcookie(...);
var_dump($_COOKIE[...]);

总会失败。

在处理用户请求的默认状态下, $_COOKIE超全局表示与请求一起从浏览器发送的所有 cookie 的数据数组。对于当前正在处理的请求,该setcookie()函数不会更改此数组。

但是,它应该出现在用户的下一个请求中。

如果出于某种原因,您希望当前的请求处理逻辑“理解”已设置了与响应标头一起发回的 cookie,则可以手动设置$_COOKIE数组中的值,例如:

setcookie(...);
$_COOKIE[...] = 'some value';
var_dump($_COOKIE);

在使用setcookie(). 如果您正在使用display_errorson 进行开发,error_reporting(E_ALL)您应该会看到一个警告。您还可以查看浏览器的基本 Web 开发工具,以检查响应标头以查看 cookie 是否正在发送。

于 2012-11-19T22:22:04.390 回答
0

另外,检查客户端和服务器上的时间。您的服务器将 cookie 设置为距当前时间一小时。cookie 的生命周期由客户端决定——如果客户端浏览器上的时间比服务器提前一个多小时,浏览器可能会立即丢弃 cookie。您可以通过将 cookie 设置得更长一些来测试这一点,例如 time() + 36000(10 小时)。

该 cookie 可在 NEXT PAGE REQUESTED 的 $_COOKIE 数组中使用,而不是在您调用 setcookie() 之后的当前页面中。

于 2012-11-19T22:16:21.867 回答
0

这不起作用的原因是因为正如 Ray 指出的那样,cookie 在请求的下一页上可用。这是因为 cookie 信息是在 HTTP 标头中传输的。所以你的代码基本上是这样做的:

-嘿,当我将此页面发送给用户时,告诉他创建此 cookie。

-(在将页面发送给用户之前)嘿,使用用户拥有的cookie。

但是他还没有那个 cookie,因为你还没有将页面发送给他(因此还没有发送 HTTP 标头告诉他创建 cookie)

于 2012-11-19T22:19:49.843 回答
0

单击此处获取有关 setcookie() 的 PHP 文档;

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

一旦设置了 cookie,就可以在下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。注意,像 $_COOKIE 这样的超全局变量在 PHP 4.1.0 中可用。Cookie 值也存在于 $_REQUEST 中。

于 2012-11-19T22:20:04.053 回答
0

来自http://php.net/manual/en/function.setcookie.php

一旦设置了 cookie,就可以在下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。注意,像 $_COOKIE 这样的超全局变量在 PHP 4.1.0 中可用。Cookie 值也存在于 $_REQUEST 中。

于 2012-11-19T22:22:15.267 回答