Здравствуйте. С куками какая то шняга непонятная твориться.
Когда записываю куки таким кодом
setCookie('key', 'value', 'time', '/');
Они записываются нормально. Когда я захожу на сайт с другого браузера (любого) и снова авторизуюсь, то в том браузере с которого я авторизовывался первый раз куки умирают.
То есть на сайте можно быть авторизованным только с одного браузера. Как исправить?
Для ответа не хватает данных. каким образом вы храните данные о авторизации? Если в сессии. то куки не исчезают, просто может протухнуть сессия. То есть первый браузер отправляет идентификатор сессии от которой уже отвязана авторизация для пользователя (либо после выполнения манипуляций с хранением авторизации старая сессия убивается вовсе).
Собственно текущий ответ как и дальнейшие рассуждения это гадание на кофейной гуще. Дополните исходную задачу описанием механизма авторизации.
Ок. механизм понятен (рекомендую от него отказаться). Причины просты при каждом запросе страниц пользователем будет запрос к базе данных. Решение: создавать сессии и хранить результаты запроса в сесии. то есть запрос к базе на авторизацию будет один а потом проверяем наличие в сессии параметра например user_id если существует то авторизация уже пройдена и ее же можно использовать для получения уже данных (экономия и удобство на лицо). учитывая что оперировать с суперглобальным масивом сессий очень удобно (учитывая что данные хранятся на сервере и доступ к ним возможен только со стороны сервера, Плюс они еще и автоматически инициируются при каждом запросе пользователя по идентификатору сессии). В общем это моя рекомендация.
Продолжая тему с вашим примером предлагаю провести следующий эксперемент:
Открыть сайт, авторизоваться а дальше найти содержимое кукисов и записать или запомнить. Открыть второй браузер и провести эти действия повторно. И также посмотреть на содержимое кукисов. Ну а дальше сделать действие которое приводит к "ошибке". Обновить страничку в первом браузере и посмотреть изменилось ли что-нибудь. Тем самым вы отсеете сомнения о том что код не работает из-за логики приложения.
4ikist: "ссесия при закрытии прерывается" Это неверно и я объясню почему.
Все работает на протоколе HTTP, это протокол прикладного уровня модели OSI. Так же это очень простой протокол с минимальным набором функций (хватит пальцев одной руки) Я расскажу потому что это нужно знать как "отче наш".
1. Это протокол работающий по принципу запрос ответ. Клиент присылает запрос и получает на него ответ. Все, на этом все общение с сервером прекращается (разрывается соединение с сервером).
2. Протокол HTTP чаще всего обрабатывает следующие команды (можно сказать что "только их") : GET POST PUT. Все другие команды обрасли такой бородой и плесенью что говорить о них вообще нет смысла потому что они не используются никак и практически нигде.
3. К запросу могут добавляться "Заголовки запроса" или проще говоря браузер может добавить массив данных к запросу которые уйдут на сервер. После обработки запроса сервером он генерирует ответ (можно сказать что ответ это набор заголовков и ничего более). После чего соединение с сервером разрывается и ни сервер ни клиент больше никак не связанны и ничего не знают друг о друге.
На этих 3 слонах стотит весь "интернет". Другого не дано все остальное что может показаться это иллюзия . так что закрылся у пользователя браузер или нет сервер не знает и знать В ТЕОРИИ не может.
Сессии закрываются только в одном единственном случае у них кончается срок жизни (Задается настройками сервера). При каждом новом запросе срок жизни обновляется.
Андрей Галкин: закрытие всего браузера прерывает сессию, и если у вас в cookies нет ни единого её идентификатора, то восстановить оборванную сессию не представляется возможным.
ukoHka: кука не сессия. А приведенный пример это следствие либо кривых рук либо логики приложения (так задумано). жаловаться что "удаляется идентификатор сессии потому что я присылаю кривую куку" идиотизм.
4ikist: "если у вас в cookies нет ни единого её идентификатора" то значит сессия уже протухла еще до закрытия браузера и обновление страницы приведет к тем же результатам. Если идентификатор есть то он восстановит сессию при повторном открытии браузера.