Короткий ответ заключается в том, чтобы вставить строку: session_name ("websitename"); как первая строка home.php
Почему? Для тех, кто оказался здесь, пытаясь понять разницу между session_name и session_id в PHP, я предлагаю следующее объяснение:
Данные сеанса в том, что я назову «хранилищем данных» на сервере PHP. Как правило, это файл на диске, но он может быть такой же базой в зависимости от того, как PHP и приложение реализованы на вашем конкретном сервере (PHP позволяет приложениям переходить на хранение сеанса, предоставленное изначально.
Данные сеанса в виде «рваного массива».
Оборванец массив хранится в хранилище данных с помощью ключа, который является уникальным для каждой сессии.
чтобы получить данные сессии из хранилища данных на ваш скрипт, вам должны иметь правый ключ для желаемой сессии.
Что происходит в индексе .php в приведенном выше примере:
- Вы выполните session_name(); Что говорит PHP не использовать имя сеанса по умолчанию (PHPSESSID) для доступа к данным cookie, но вместо этого использовать имя сайта
- Вы выполните session_start(); PHP ищет куки, отправленные из браузера с ключевым именем «веб-сайта». Он не находит его, поэтому он создает новый сеанс, генерируя случайный идентификатор сеанса (назовем его «A1»; он хранит новый идентификатор сеанса в файле cookie с ключом «websitename»; инициализирует данные сеанса пустой массив. (как если бы вы сделали $ _SESSION = array();)
- У вас есть оператор if, где вы проверяете, был ли сеанс запущен. То, как вы используете это, является нечетным. Если сеанс действительно начался, повторите большую часть того, что сеанс сеанса просто сделал для вас (все, кроме инициализации массива). В этом случае допустим, что новый, восстановленный идентификатор сеанса os «B2». Но затем вы проваливаете и выполняете еще два оператора, которые не делают любой смысл, если сеанс не запустился. Если сеанс не начал устанавливать ключ администратора в $ _SESSION, это бессмысленно, поскольку перенаправляется на home.php, который зависит от успешного инициализации сеанса index.php. Мне больше смысла что если сбой сеанса завершен, вы регистрируете mes мудрец к системному администратору или самому себе, что сайт настроен неправильно. Если сайт настроен для сеансов, запуск сеанса всегда будет возвращать значение true.
- Теперь вы установите переменную сеанса с ключом «admin» на значение «login», сделав его элементом супер глобального массива $ _SESSION.
- Когда вы проваливаетесь в нижней части index.php (выходите из него), PHP записывает текущее содержимое массива $ _SESSION в хранилище данных, используя ключ, который находится в файле cookie (то есть, «B2», где могут быть найдены другие скрипты это. данные сеанса хранятся в хранилище usng ключ «B2» является $ _SESSION массив с одним элементом с ключом «админ» и значение «Вход»
Когда вы исследуете ваш код в домашних условиях. PHP Я считаю, что это то, что происходит:..
- вы делаете session_start() Потому что вы не делали перед session_name(), PHP использует имя по умолчанию PHPSESSID PHP ищет cookie, отправленный из браузера ключом вашего имени сеанса (PHPSESSID) и не находит его. Таким образом, он создает новый сеанс. Он генерирует новый случайный идентификатор сеанса для сеанса, назовем его «C3»; он инициализирует данные сеанса ($ _SESSION) пустующему массиву и создает куки-файл с ключом PHPSESSID и значением идентификатора случайного сеанса, созданного для вашего сеанса («C3»).
- Вы делаете if/else, где вы проверяете, есть ли у данных сеанса элемент с ключом «admin». Массив сеанса пуст, поэтому если else выбирает ложную ветвь и печатает, что пользователь не вошел в систему.
Ваш код более сложный, чем это из-за «if» в index.php, но для упрощения issue:
Вы сохранили свое значение администратора в хранилище данных сеанса, используя ключ «B2», а затем искали его в home.php с ключом «C3» и не смогли найти его. Это связано с тем, что вы используете имя сеанса «websitename» в index.php, но используете имя сеанса «PHPSESSIONID» в home.php. Если вы посмотрите на файлы cookie, используя вкладку ресурсов инструментов разработчика Chrome, вы увидите файлы cookie для «websitename» и «PHPSESSIONID». В инструментах разработчика куки будут отображать реальные, случайные, идентификаторы сеанса (26 символов) вместо двух идентификаторов сеанса символов, которые я составил для этого обсуждения.
Идея именования сеансов заключается в разделении сеансов друг от друга (в основном, когда вы запускаете два или более проектов, которые используют сеансы на одной машине). поэтому сеанс с именем 'name1' не передает никакой информации с сеансом с именем' name2'. – Leri