как php решает, отправлять ли файл cookie сеанса

Я впервые посетил свой веб-сайт и вижу файл cookie сеанса, установленный сервером. Я перезагружаю страницу и вижу, что только мой браузер отправляет идентификатор сеанса на сервер, а сервер не возвращает cookie сеанса. Я использую фреймворк Kohana. Мне интересно, является ли это собственным поведением PHP, чтобы не отправлять файл cookie сеанса, если он уже есть в запросе и срок его действия не истек, или это обрабатывается фреймворком?

Я нашел следующий фрагмент кода, который предположительно делает волшебство:

protected function _read($id = NULL)
    {
        // Sync up the session cookie with Cookie parameters
        session_set_cookie_params($this->_lifetime, Cookie::$path, Cookie::$domain, Cookie::$secure, Cookie::$httponly);

        // Do not allow PHP to send Cache-Control headers
        session_cache_limiter(FALSE);

        // Set the session cookie name
        session_name($this->_name);

        if ($id)
        {
            // Set the session id
            session_id($id);
        }

        // Start the session
        session_start();

        // Use the $_SESSION global for storing data
        $this->_data =& $_SESSION;

        return NULL;
    }

Это то, что я ищу?


person Max Koretskyi    schedule 11.02.2014    source источник
comment
собственный протокол http - если я понял ваш вопрос   -  person    schedule 11.02.2014
comment
Если ваш браузер отправляет идентификатор сеанса на сервер, это означает, что файл cookie уже установлен.   -  person Sammitch    schedule 11.02.2014
comment
@Dagon, ты имеешь в виду, что это обрабатывается нативным PHP? В частности по этой функции - session_set_cookie_params ?   -  person Max Koretskyi    schedule 11.02.2014
comment
@ Sammitch, конечно, да, но почему он не возвращается сервером? Какой механизм стоит за отслеживанием наличия файла cookie сеанса и принятием решения об отправке идентификатора сеанса в браузер или нет?   -  person Max Koretskyi    schedule 11.02.2014
comment
вы спрашиваете, как работают файлы cookie или сеансы? или у вас есть конкретная проблема или?   -  person    schedule 11.02.2014
comment
@Dagon, нет, я спрашиваю о механизме, который отслеживает, присутствует ли файл cookie сеанса в запросе, и решает, отправлять его в браузер или нет.   -  person Max Koretskyi    schedule 11.02.2014
comment
@Maximus Это собственное поведение PHP, если вы не определили собственный обработчик сохранения с помощью session_set_save_handler()   -  person hindmost    schedule 11.02.2014
comment
Заголовок файла cookie будет отправлен в ответ только в том случае, если в запросе клиента не было соответствующего файла cookie или что-то на стороне сервера вызвало отправку файла cookie, например, изменение значений/настроек файла cookie.   -  person Marc B    schedule 11.02.2014
comment
@MarcB, правильно, я это уже знаю). Мой вопрос в том, какой механизм реализует эту логику?   -  person Max Koretskyi    schedule 11.02.2014
comment
@Hindmost, большое спасибо! Функция session_set_cookie_params имеет к этому какое-то отношение?   -  person Max Koretskyi    schedule 11.02.2014
comment
@Maximus № session_set_cookie_params предназначен для изменения настроек по умолчанию для хранения/обработки сеансовых файлов cookie.   -  person hindmost    schedule 12.02.2014


Ответы (1)


Официальное руководство гласит:

При вызове session_start() или при автоматическом запуске сеанса PHP вызывает обработчики сохранения сеанса открытия и чтения. Это будет либо встроенный обработчик сохранения, предоставляемый по умолчанию, либо расширения PHP (такие как SQLite или Memcached); или может быть настраиваемым обработчиком, как определено в session_set_save_handler(). Обратный вызов чтения извлечет любые существующие данные сеанса (хранящиеся в специальном сериализованном формате) и будет десериализован и будет использоваться для автоматического заполнения суперглобального массива $_SESSION, когда обратный вызов чтения возвращает сохраненные данные сеанса обратно в обработку сеанса PHP.

Таким образом, ответ должен звучать так: Это собственное поведение PHP, если вы не определили собственный обработчик сохранения с помощью session_set_save_handler().

person hindmost    schedule 11.02.2014