Обнаруживать, разрешены ли cookie в PHP

Я пытаюсь определить, включен ли cookie пользователя на моей странице или нет. Следующий код выполняет проверку, но я не знаю, как перенаправить пользователя на страницу, из которой они пришли.

Сценарий запускает сеанс и проверяет, проверено ли оно на наличие файлов cookie. Если нет, он перенаправляет пользователя на тестовую страницу, и поскольку я вызывал session_start () на первой странице, я должен увидеть файл cookie PHPSESSID, если в пользовательском агенте включены файлы cookie.

Проблема в том, что скрипт может быть вызван с любой страницы моего сайта, и мне придется перенаправить их на выбранную страницу, скажем index.php? 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(); } } 

Related of "Обнаруживать, разрешены ли cookie в PHP"

Я думаю, что лучше сделать один файл cookie 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; ?> 

Загрузите cookie is working cookiechecker.php в браузере, и он скажет, что cookie is working . Вызовите его с командной строкой, как curl . Будет сказано, cookie is not working


Обновить

Вот одно решение для файлов.

 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

Я думаю, что это самое простое решение. Не требует отдельных файлов и позволяет продолжить сценарий, если включены файлы cookie:

 $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 с $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