首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setcookie不工作

setcookie不工作
EN

Stack Overflow用户
提问于 2012-11-20 06:14:57
回答 5查看 1.6K关注 0票数 2

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

这只是一个测试页面,在本地主机上运行。我有一个超文本标记语言登录页面,发送表单数据到PHP脚本,这是检查MySQL数据库中的详细信息。正在使用结果设置cookie,但无法使其正常工作。

代码语言:javascript
复制
$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部件工作正常)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-20 06:22:04

做像这样的事情

代码语言:javascript
复制
setcookie(...);
var_dump($_COOKIE[...]);

总是会失败的。

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

然而,它应该在用户的下一个请求中显示出来。

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

代码语言:javascript
复制
setcookie(...);
$_COOKIE[...] = 'some value';
var_dump($_COOKIE);

在使用setcookie()之前,您还需要确认没有向浏览器发送任何输出。如果您使用display_errors on和error_reporting(E_ALL)进行开发,您应该会看到一条警告。此外,您还可以查看浏览器的基本web开发工具,以检查响应头,以查看是否正在发送cookie。

票数 3
EN

Stack Overflow用户

发布于 2012-11-20 06:16:22

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

cookie在请求的下一个页面的$_COOKIE数组中可用,而不是在调用setcookie()之后的当前页面中。

票数 0
EN

Stack Overflow用户

发布于 2012-11-20 06:19:50

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13463239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档