使用页面设置cookie有效,但是一旦我离开页面,cookie就会被删除。浏览器设置被设置为保留cookie,这个问题不会发生在其他网站上只有这个PHP代码:
<!DOCTYPE html>
<html>
<title>Authentication cookie</title>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Authentication code: <input type="text" name="authcode" value="<?php echo $_GET["authcode"]; ?>">
<input type="submit" name="submit" value="Submit">
</form><br>
<?php
$cookie_name = "authpi";
$cookie_value = $_POST["authcode"];
setcookie($cookie_name, $cookie_value, time() + (10 * 365 * 24 * 60 * 60), '/', '10.0.0.2'); // 86400 = 1 day
?>
<?php
if(!isset($_COOKIE["authpi"])) {
echo "Authentication Cookie named '" . $cookie_name . "' is not set!";
#//header("Location: http://www.google.at/");
} else {
echo "Authentication Cookie '" . $cookie_name . "' is set!<br>";
echo "Your authentication code is: " . $_COOKIE[$cookie_name];
}
?>
<p><strong>Note:</strong> After setting the Cookie reload the page to make sure it works!</p>
</body>
</html>
为什么在离开页面后删除了cookie?
PS:创建cookie并不是问题所在。这很好。
答案 0 :(得分:0)
永远不会设置cookie。
您尝试在发送标头后设置Cookie。如果你想这样做,你需要使用输出缓冲区,这意味着你必须在向浏览器发送任何标题之前使用ob_start();
。
有关ob_start();
的更多信息:Output Buffers PHP
简单说明:那个代码......很乱。
你的代码的工作示例(仍然很乱,因为它是一个快速编码)
<?php
$cookie_name = "authpi";
if( isset($_POST['submit']) ) {
$cookie_value = $_POST["authcode"];
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie($cookie_name, $cookie_value, time() + (10 * 365 * 24 * 60 * 60 * 60), '/', $domain); // 86400 = 1 day
}
if(!isset($_COOKIE["authpi"])) {
echo "Authentication Cookie named '" . $cookie_name . "' is not set!";
} else {
echo "Authentication Cookie '" . $cookie_name . "' is set!<br>";
echo "Your authentication code is: " . $_COOKIE[$cookie_name];
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Authentication cookie</title>
</head>
<body>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
Authentication code: <input type="text" name="authcode" value="<?php echo $_GET["authcode"]; ?>">
<input type="submit" name="submit" value="Submit">
</form>
<br>
<p><strong>Note:</strong> After setting the Cookie reload the page to make sure it works!</p>
</body>
</html>
答案 1 :(得分:0)
在您已将内容发送到浏览器后,您无法使用setcookie()
或更改http标头的任何其他功能。在包含这些函数的代码块的开放<?php
之前,不能有任何(甚至不是空格)(除非您启用了输出缓冲)。
在<!DOCTYPE html>
如果您只想在用户在表单上提交身份验证代码后设置Cookie,则正确的代码(仍在所有HTML之前)仍然如下:
if(isset($_POST['submit'],$_POST['authcode'])){
//set your cookie here
}
与其他标题一样,Cookie必须在您的任何输出之前发送 脚本。这要求你放置 在任何输出之前调用此函数,包括和 标签以及任何空格。