Почему session_start необходим при использовании сессии?

Почему я могу использовать setcookie без любой подготовки, в то время как потребность a session_start() перед использованием $_SESSION? И я думаю работы, которые они делают подобны.

5
задан Young 17 March 2010 в 09:18
поделиться

4 ответа

Потому что setcookie () определяет cookie, отправляемый вместе с остальными заголовками HTTP . Это совершенно другое дело, чем то, что делает session_start () , например создание сеанса или возобновление текущего сеанса на основе идентификатора сеанса, переданного через запрос GET или POST или переданного через cookie.

Первый просто добавляет что-то в заголовок и отправляет его в браузер, а другой получает идентификатор сеанса из $ _COOKIEs или $ _GET или $ _POST, а затем пытается найти файл сеанса в session_save_path и при обнаружении десериализации его значений в $ _SESSION, а если нет, создайте новый сеанс, возможно, используя setcookie в процессе для установки идентификатора сеанса.

См. Главу о сеансах в Руководстве по PHP.


Изменить Как @Felix правильно указывает ниже, сеанс не обязательно сохраняется в файле. Это не так важно, потому что аргумент остается прежним: session_start найдет и (повторно) инициализирует данные вашего сеанса, а setcookie просто сделает то, что подразумевает название. {{1 }}

11
ответ дан 18 December 2019 в 14:44
поделиться

Для объяснения см. Ответ перед моим. Если вы просто не хотите вызывать функцию start_session (), посмотрите этот параметр в php.ini: session.auto_start

1
ответ дан 18 December 2019 в 14:44
поделиться

Данные сеанса не обязательно хранятся в файле, как говорит Гордон. С помощью session_set_save_handler () вы можете определить свой собственный бэкэнд, который должен хранить значения, например в базе данных.

Все эти данные обрабатываются с помощью session_start () . Таким образом, вы можете легко изменить свой бэкэнд, не нарушая работу вашего приложения.

Примечание. Это только одна причина для session_start () , и опять же, она делает гораздо больше, чем просто устанавливает файлы cookie.

1
ответ дан 18 December 2019 в 14:44
поделиться

Данные сеанса не обязательно хранятся в файле, как говорит Гордон. С помощью session_set_save_handler () вы можете определить свой собственный сервер, который должен хранить значения, например в базе данных.

Все эти данные обрабатываются с помощью session_start () . Таким образом, вы можете легко изменить серверную часть, не нарушая работу вашего приложения.

Примечание: это только одна причина для session_start () , и опять же, она делает гораздо больше, чем просто устанавливает файлы cookie.

0
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: