setcookie不工作

时间:2012-11-19 22:14:57

标签: php cookies setcookie

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

这只是一个在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部分工作正常)

5 个答案:

答案 0 :(得分:3)

做类似

的事情
setcookie(...);
var_dump($_COOKIE[...]);

总会失败。

在处理用户请求的默认状态下,$_COOKIE superglobal表示从浏览器发送的所有cookie的数据数组以及请求。 setcookie()函数不会为当前正在处理的请求更改此数组。

然而,应该出现在用户的下一个请求中。

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

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

在使用setcookie()之前,您还需要验证是否未向浏览器发送任何输出。如果您使用display_errorserror_reporting(E_ALL)进行开发,则会看到警告。您还可以查看基本的Web开发工具,以便浏览器检查响应标头以查看是否正在发送cookie。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

Click here for PHP Documentation on setcookie();

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

设置好Cookie后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组在下一页加载上访问这些Cookie。注意,$ _COOKIE等超级全局变量在PHP 4.1.0中可用。 Cookie值也存在于$ _REQUEST中。

答案 4 :(得分:0)

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

  

设置好Cookie后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组访问 下一页 。注意,$ _COOKIE等超级全局变量在PHP 4.1.0中可用。 Cookie值也存在于$ _REQUEST。