0

我正在尝试在 PHP 中创建一个 cookie。通过使用以下代码:

<?php
//Writing Cookie Data
setcookie("Enabled", "True", time()+3600);
setcookie("Username", $username);
//Test if cookie is set. / Just for test purposes.
echo $_COOKIE["Username"];
?>

设置 cookie 后,我使用代码让用户通过按图像(链接)进入下一页。这个 :

<a href="folder/index.php"><img src="image.png"></img></a>

我在下一页使用了一个代码来检查 cookie 是否存在。这个 :

<!-- Security Start -->
<?php
If (isset($_COOKIE["Enabled"])) {

}
else
{
header("Location: ../");
}
?>
<!-- Security Stop -->

当用户转到下一页时,如果安全 cookie 不存在,他将被重定向到指定的文件夹。我可能已经正确设置了所有内容,并且已经检查了很多东西,但是我无法想出解决此问题的方法。cookie 应该存在,并且存在。因为回显代码在同一页面上工作。但是在转到下一页之后;cookie突然消失了,它不存在。Echo 和在下一页的 If 语句中使用它都是不可能的。

有什么想法可能导致这种情况吗?

4

2 回答 2

0

您看不到 cookie,因为您没有为setcookie 使用“/”路径设置 PATH 参数将启用在域中的任何位置使用 cookie,否则 cookie 只能由文件夹和子文件夹中的脚本看到执行脚本。

setcookie("Enabled", "True", time()+3600, "/");
setcookie("Username", $username,time()+3600,"/");

但与评论一样,不要使用 cookie 代替会话,因为 cookie 很容易被伪造。

如果您已经启动了会话,则不需要再次执行 session_start(),如果您有 php 5.4 或更高版本,则可以使用session_status检查会话状态

if (session_status() !== PHP_SESSION_ACTIVE) {session_start();}

或者如果它低于 5.4

if (!isset($_SESSION)) { session_start(); }

根据用户在 session_status 页面上提交的评论

于 2013-08-26T19:31:26.710 回答
0

饼干

如果你想要 cookie,我会做一些事情来调试它:

我会检查帕特里克所说的路径

我会查看 setcookie 的返回值,看看它是否告诉你它失败了。

在您的浏览器中,您应该能够看到所有 cookie 的列表,并且您可以检查 cookie 是否已实际设置。再次,看看这里的路径。

改为使用会话

但是,我同意 developerwjk 的会话建议,一种方法是确保将“ob_start()”作为页面上发生的第一件事之一,然后它将缓冲输出并给你时间操纵 $_SESSION。确保在完成所有会话内容后调用 ob_flush() 来刷新缓冲区。我相信否则它会在页面末尾自动刷新缓冲区,但它可能会丢弃所有内容。

于 2013-08-26T19:42:44.257 回答