我看到很多人都问了类似的问题,所以请原谅我是否重复,但我在其他帖子中找不到答案。
这只是一个在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部分工作正常)
答案 0 :(得分:3)
做类似
的事情setcookie(...);
var_dump($_COOKIE[...]);
总会失败。
在处理用户请求的默认状态下,$_COOKIE
superglobal表示从浏览器发送的所有cookie的数据数组以及请求。 setcookie()
函数不会为当前正在处理的请求更改此数组。
然而,应该出现在用户的下一个请求中。
如果由于某种原因,您希望当前的请求处理逻辑“理解”已经设置了与响应头一起发回的cookie,您可以手动设置$_COOKIE
数组中的值,如:< / p>
setcookie(...);
$_COOKIE[...] = 'some value';
var_dump($_COOKIE);
在使用setcookie()
之前,您还需要验证是否未向浏览器发送任何输出。如果您使用display_errors
和error_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。
中