Определить, включены ли cookies в PHP
Я пытаюсь определить, есть ли у пользователя на моей странице куки-файлы или нет. Следующий код выполняет проверку, но я понятия не имею, как перенаправить пользователя на страницу, с которой они пришли.
скрипт запускает сеанс и проверяет, проверил ли он уже наличие файлов cookie. Если нет, он перенаправляет пользователя на тестовую страницу, и поскольку я вызвал session_start() на первой странице, Я должен увидеть файл cookie PHPSESSID, если у агента пользователя включены файлы cookie.
проблема is, THS скрипт может быть вызван с любой страницы моего сайта, и мне придется перенаправить их обратно на выбранную страницу, скажем index.РНР?page=news&postid=4.
session_start();
// Check if client accepts cookies //
if (!isset($_SESSION['cookies_ok'])) {
if (isset($_GET['cookie_test'])) {
if (!isset($_COOKIE['PHPSESSID'])) {
die('Cookies are disabled');
} else {
$_SESSION['cookies_ok'] = true;
header(-------- - ? ? ? ? ? -------- -);
exit();
}
}
if (!isset($_COOKIE['PHPSESSID'])) {
header('Location: index.php?cookie_test=1');
exit();
}
}
4 ответов
Я думаю, что лучше сделать один файл cookie и перенаправить его в другой файл. Затем следующий файл может проверить значение и определить, включен ли cookie. См. пример.
создать два файла, cookiechecker.php
и stat.php
// cookiechecker.php
// save the referrer in session. if cookie works we can get back to it later.
session_start();
$_SESSION['page'] = $_SERVER['HTTP_REFERER'];
// setting cookie to test
setcookie('foo', 'bar', time()+3600);
header("location: stat.php");
и
stat.php
<?php if(isset($_COOKIE['foo']) && $_COOKIE['foo']=='bar'):
// cookie is working
session_start();
// get back to our old page
header("location: {$_SESSION['page']}");
else: // show the message ?>
cookie is not working
<? endif; ?>
загрузить cookiechecker.php
в браузере он скажет cookie is working
. Вызовите его с помощью командной строки, как curl
. Он скажет:"!--9-->
обновление
здесь это одно файловое решение.
session_start();
if (isset($_GET['check']) && $_GET['check'] == true) {
if (isset($_COOKIE['foo']) && $_COOKIE['foo'] == 'bar') {
// cookie is working
// get back to our old page
header("location: {$_SESSION['page']}");
} else {
// show the message "cookie is not working"
}
} else {
// save the referrer in session. if cookie works we can get back to it later.
$_SESSION['page'] = $_SERVER['HTTP_REFERER'];
// set a cookie to test
setcookie('foo', 'bar', time() + 3600);
// redirecting to the same page to check
header("location: {$_SERVER['PHP_SELF']}?check=true");
}
HTTP_REFERER не работал для меня, похоже, REQUEST_URI-это то, что мне нужно.
вот код, который я, наконец, использовать:
session_start();
// ------------------------------- //
// Check if client accepts cookies //
// ------------------------------- //
if( !isset( $_SESSION['cookies_ok'] ) ) {
if( isset( $_GET['cookie_test'] ) ) {
if( !isset( $_COOKIE['PHPSESSID'] ) ) {
die('Cookies are disabled');
}
else {
$_SESSION['cookies_ok'] = true;
$go_to = $_SESSION['cookie_test_caller'];
unset( $_SESSION['cookie_test_caller'] );
header("Location: $go_to");
exit();
}
}
if( !isset( $_COOKIE['PHPSESSID'] ) ){
$_SESSION['cookie_test_caller'] = $_SERVER['REQUEST_URI'];
header('Location: index.php?cookie_test=1');
exit();
}
}
// ------------------------------- //
нет необходимости сохранять исходный URL и перенаправлять на него впоследствии. Вы можете выполнить прозрачное перенаправление через AJAX который не запускает перезагрузку страницы. Это очень просто реализовать. Вы можете проверить мой пост здесь: https://stackoverflow.com/a/18832817/2784322
Я думаю, что это простое решение. Не требует отдельных файлов и позволяет продолжить работу со скриптом, если cookies включены:
$cookiesEnabled = true;
if (!isset($_COOKIE['mycookie'])) {
$cookiesEnabled = false;
if (!isset($_GET['cookie_test'])) {
setcookie('mycookie', 1, 0, '/');
@ob_end_clean();
$_SESSION['original_url'] = $_SERVER['REQUEST_URI'];
$uri = $_SERVER['REQUEST_URI'];
$uri = explode('?', $uri);
$q = (isset($uri[1]) && $uri[1])?explode('&', $uri[1]):array();
$q[] = 'cookie_test=1';
$uri[1] = implode('&', $q);
$uri = implode('?', $uri);
header('Location: '.$uri);
die;
}
} else if (isset($_GET['cookie_test'])) {
@ob_end_clean();
$uri = $_SESSION['original_url'];
unset($_SESSION['original_url']);
header('Location: '.$uri);
die;
}
// if (!$cookiesEnabled) ... do what you want if cookies are disabled