我正在尝试在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应该存在,并且存在。 因为echo代码在同一页面上工作。 但是在进入下一页之后; cookie突然消失了,它不存在。 在下一页的If语句中进行回声和使用都是不可能的。
任何可能导致这种情况的想法?
答案 0 :(得分: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页面上的user submitted comment
答案 1 :(得分:0)
<强>缓存强>
如果你想要cookie,我会做一些调试的事情:
我会查看Patrick所说的路径
我会查看setcookie的返回值,看看它是否告诉你它失败了。
在浏览器中,您应该能够看到所有Cookie的列表,并且可以检查并确定Cookie是否已实际设置。再看看这里的路径。
改为使用会话
但是,我同意developerwjk的会话建议,一种方法是确保将'ob_start()'作为页面上发生的第一件事之一,然后缓冲输出并给出你有时间操纵$ _SESSION。确保然后调用ob_flush(),在完成所有会话内容后刷新缓冲区。我相信否则它将自动刷新页面末尾的缓冲区,但它可能只是丢弃所有内容..