Почему я могу использовать setcookie
без любой подготовки, в то время как потребность a session_start()
перед использованием $_SESSION
? И я думаю работы, которые они делают подобны.
Потому что setcookie () определяет cookie, отправляемый вместе с остальными заголовками HTTP . Это совершенно другое дело, чем то, что делает session_start () , например создание сеанса или возобновление текущего сеанса на основе идентификатора сеанса, переданного через запрос GET или POST или переданного через cookie.
Первый просто добавляет что-то в заголовок и отправляет его в браузер, а другой получает идентификатор сеанса из $ _COOKIEs или $ _GET или $ _POST, а затем пытается найти файл сеанса в session_save_path и при обнаружении десериализации его значений в $ _SESSION, а если нет, создайте новый сеанс, возможно, используя setcookie
в процессе для установки идентификатора сеанса.
См. Главу о сеансах в Руководстве по PHP.
Изменить Как @Felix правильно указывает ниже, сеанс не обязательно сохраняется в файле. Это не так важно, потому что аргумент остается прежним: session_start
найдет и (повторно) инициализирует данные вашего сеанса, а setcookie
просто сделает то, что подразумевает название. {{1 }}
Для объяснения см. Ответ перед моим. Если вы просто не хотите вызывать функцию start_session (), посмотрите этот параметр в php.ini: session.auto_start
Данные сеанса не обязательно хранятся в файле, как говорит Гордон. С помощью session_set_save_handler ()
вы можете определить свой собственный бэкэнд, который должен хранить значения, например в базе данных.
Все эти данные обрабатываются с помощью session_start ()
. Таким образом, вы можете легко изменить свой бэкэнд, не нарушая работу вашего приложения.
Примечание. Это только одна причина для session_start ()
, и опять же, она делает гораздо больше, чем просто устанавливает файлы cookie.
Данные сеанса не обязательно хранятся в файле, как говорит Гордон. С помощью session_set_save_handler ()
вы можете определить свой собственный сервер, который должен хранить значения, например в базе данных.
Все эти данные обрабатываются с помощью session_start ()
. Таким образом, вы можете легко изменить серверную часть, не нарушая работу вашего приложения.
Примечание: это только одна причина для session_start ()
, и опять же, она делает гораздо больше, чем просто устанавливает файлы cookie.