Почему я могу использовать setcookie
без какой-либо подготовки, а session_start()
перед использованием $_SESSION
? И я думаю, что они работают одинаково.
Потому что setcookie () определяет cookie для отправки вместе с остальными HTTP-заголовками . Это совсем другое дело, чем то, что делает session_start () , например создание сеанса или возобновление текущего на основе идентификатора сеанса, переданного через запрос GET или POST, или переданного через файл cookie.
Первый просто добавляет что-то в заголовок и отправляет его в браузер, в то время как другой получает идентификатор сеанса из $ _COOKIE или $ _GET или $ _POST, а затем пытается найти файл сеанса в session_save_path и, когда найден неэтериализующий значения его в $ _SESSION, а если нет, создайте новый сеанс, возможно, используя setcookie
в процессе установки идентификатора сеанса.
См. Главу «Сессии в руководстве PHP».
Edit Like @Felix правильно указывает ниже, сессия не обязательно сохраняется в файле. Это не так важно, потому что аргумент остается тем же: session_start
найдет и (повторно) инициализирует ваши данные сеанса, в то время как setcookie
просто делает то, что подразумевает название.
Для объяснения см. Ответ перед моим. Если вы просто не хотите вызывать функцию 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.