Ситуация такая
есть два сайта (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);
}
Ответ
Почему вы куку ставите на domain.com а снимаете с .domain.com? PHP отправляет это в заголовок Set-Cookie как есть, а браузеры могут не понять. Второй момент - попробуйте два последних параметра self::isHttps(), self::HTTP_ONLY убрать: для эксперимента(обычно их всегда по умолчанию оставляют).
Ещё один момент - попробуйте убирать куки, проставляя настоящее время в прошлом вместо null
setcookie(self::KEY_TOKEN, '', time() - 86400, '/', 'domain.com');//например так
Иначе, говорят, не все браузеры поймут что это сброс - опять-же. А так ошибок нет, кука с поддомена, живущая в пространстве основного домена: это нормально, а наоборот: политика безопасности не пропустит.
Комментариев нет:
Отправить комментарий