Я пытаюсь установить cookie и перенаправить. Использование Debian GNU / Linux 6.0 (64 бит) с PHP 5.3.3-7 + squeeze19 с Suhosin-Patch (cli) (построено: 17 февраля 2014 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>
Почему первый пример работает, но не другие?
Использовать, а не перенаправлять
Это также сохраняет браузер в запросе 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; ?>
в<?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");
Я тоже получал эту странность, но с перенаправлением js. Тестирование с помощью браузера Chrome на xp.
То, как я решил это, – это сделать настройку cookie с помощью js с помощью document.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 по какой-то причине …