我正在尝试设置Cookie并重定向。使用Debian GNU / Linux 6.0(64位)和PHP 5.3.3-7 + squeeze19与Suhosin-Patch(cli)(内置:2014年2月17日10:10:23)和Apache / 2.2.16(Debian)。
出于某种原因,这有效:
<?php
$cookie_name = $_GET['a'];
$cookie_value = $_GET['b'];
setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
?>
但这不是:
<?php
$cookie_name = $_GET['a'];
$cookie_value = $_GET['b'];
setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
header("Location: http://www.example.com");
exit;
?>
即使在几次页面加载后也是如此。我已经尝试将错误报告添加到我的代码顶部,但是当我加载页面或Apache日志时没有看到任何错误(/var/log/apache2/error.log):
error_reporting(E_ALL);ini_set('display_errors','1');
出于某种原因,每当我重定向时,即使使用如下的javascript,也不会添加cookie。
<?php
$cookie_name = $_GET['a'];
$cookie_value = $_GET['b'];
setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="1;url=http://www.example.com">
<script type="text/javascript">
window.location.href = "http://www.example.com"
</script>
<title>Page Redirection</title>
</head>
<body>
If you are not redirected, follow <a href='http://www.example.com'>this link</a>!
</body>
</html>
为什么第一个例子有效而不是其他例子?
答案 0 :(得分:0)
使用包含而不是重定向
这也为浏览器保存往返HTTP请求
<?php
$cookie_name = $_GET['a'];
$cookie_value = $_GET['b'];
setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
include('/home/user/public_html/index.html');
exit;
?>
虽然我更喜欢包含重定向标头,但您的Cookie应该可行。我已经过测试,它的工作原理就像它应该的那样。
在我的测试中,我重定向到另一个域。 cookie在PHP脚本所在的域中设置。
setcookie('test', 'test', time() + (86400 * 30), "/");
header("Location: http://www.intel.com");
答案 1 :(得分:0)
我也得到了这种奇怪但js重定向。在xp上使用chrome浏览器进行测试。
我解决它的方法是使用document.cookie =
进行注入js的cookie设置 ?>
<script type="text/javascript">
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
setCookie("foo","<?php echo $bar; ?>",30);
window.location = "<?php echo $destination_page; ?>.php";
</script>
<?php
然后问题就消失了。
感觉重定向导致php setcookie因某种原因失败了......