Поделиться / удалить cookie через поддомен (www) в php - PullRequest
0 голосов
/ 12 марта 2012

У меня есть система входа / выхода, и мне нужны файлы cookie для работы через www.mydomain.com, а также mydomain.com.У меня проблема с удалением файлов cookie.При входе в систему я устанавливаю файлы cookie следующим образом:

session_start();
//set session vars
setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30), '/', 'domain.com');
setcookie('full_name', $row['first_name']." ".$row['last_name'], time() + (60 * 60 * 24 * 30), '/', 'domain.com');

, который работает, и куки сохраняются и работают с или без www.Это позволяет просматривать страницу профиля, которая имеет следующий код:

session_start();
if(!isset($_SESSION['user_id'])) {
if(isset($_COOKIE['user_id']) && isset($_COOKIE['full_name'])) {
    $_SESSION['user_id'] = $_COOKIE['user_id'];
    $_SESSION['full_name'] = $_COOKIE['full_name'];
}
}
if(!isset($_SESSION['user_id'])) {
echo '<p class="login">Please <a href="login.php">log in</a> to access this page.</p>';
exit();
}

Проблема при выходе из системы:

session_start();

if(isset($_SESSION['user_id'])) {
$_SESSION = array();

if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time() - 3600, '/', 'domain.com');
}

session_destroy();
}
setcookie('user_id', '', time() - 3600, '/', 'domain.com');
setcookie('full_name', '', time() - 3600, '/', 'domain.com');

Файлы cookie удаляются, но только для текущего домена.Поэтому, если я войду с domain.com/login.php и выйду с domain.com/logout.php, domain.com/profile.php не будет работать (хорошо), но я все равно смогу просмотреть www.domain.com/profile.php, если я посетил www.версия до выхода.И наоборот, я могу выйти из www.domain.com/logout.php и по-прежнему иметь возможность просматривать domain.com/profile.php.Есть ли способ удалить все куки в поддоменах?

Ответы [ 2 ]

1 голос
/ 21 августа 2015

ОП написал в комментарии:

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

$some_name = session_name("cool_session");
session_set_cookie_params(0, '/', '.domain.com'); session_start(); 
0 голосов
/ 12 марта 2012

Используйте '.domain.com' вместо 'domain.com' для работы со всеми поддоменами.

...