#php #cookie #unset
Ситуация такая
есть два сайта (domain.com , a.domain.com), с единой БД и тд.
Если авторизоваться и выйти с главного домена, то куки создаются и удаляются для
всех доменов.
Если авторизоваться с a.domain.com, то куки создаются для всех доменом, но, при этом
не удаляются, если выйти с главного домена, куки на А остаются :( а выйти с основного,
остаются на А.
Как это побороть?
При выходе указываю, что нужно уйти со всех субдоменов, ставя точку перед доменом:
.domain.com
public static function authorize($user)
{
if (self::isAuthorize()) {
return;
}
$_SESSION[self::KEY_TOKEN] = $user->token;
$_SESSION[self::KEY_ID] = $user->id;
setcookie(self::KEY_TOKEN, $user->token, time() + 3600 * 24 * 365, '/', 'domain.com',
self::isHttps(), self::HTTP_ONLY);
setcookie(self::KEY_ID, $user->id, time() + 3600 * 24 * 365, '/', 'domain.com',
self::isHttps(), self::HTTP_ONLY);
}
# выходим с авторизации
public static function exit()
{
unset($_SESSION[self::KEY_TOKEN]);
unset($_SESSION[self::KEY_ID]);
setcookie(self::KEY_TOKEN, null, null, '/', '.domain.com', self::isHttps(), self::HTTP_ONLY);
setcookie(self::KEY_ID, null, null, '/', '.domain.com', self::isHttps(), self::HTTP_ONLY);
}
Ответы
Ответ 1
Почему вы куку ставите на domain.com а снимаете с .domain.com? PHP отправляет это в заголовок Set-Cookie как есть, а браузеры могут не понять. Второй момент - попробуйте два последних параметра self::isHttps(), self::HTTP_ONLY убрать: для эксперимента(обычно их всегда по умолчанию оставляют). Ещё один момент - попробуйте убирать куки, проставляя настоящее время в прошлом вместо null: setcookie(self::KEY_TOKEN, '', time() - 86400, '/', 'domain.com');//например так Иначе, говорят, не все браузеры поймут что это сброс - опять-же. А так ошибок нет, кука с поддомена, живущая в пространстве основного домена: это нормально, а наоборот: политика безопасности не пропустит.
Комментариев нет:
Отправить комментарий