Я смею ответить, так как я собирался задать тот же вопрос, так как вышеупомянутый фрагмент кода изначально не имел для меня смысла (либо). Поэтому я удивился, почему этот код можно найти повсюду на сайте php.net, и нашел предварительный ответ.
- До того ... как я думал / надеялся
session_id()
работает
session_id()
возвращает идентификатор сеанса, если сеанс существует. Итак, если я прошел аутентификацию на своем сайте, и сессия была создана и заполнена данными, файл cookie был создан и отправлен в браузер
session_start();
$_SESSION['uid'] = 'root';
на следующей странице, которую я открою в браузере, PHP должен увидеть, что тот самый сеанс, который я открыл на 10 секунд раньше из значения cookie (и внутренних файлов), верно? Таким образом, запустив этот код перед any session_start()
$sid = session_id();
if ($sid) {
echo "Yes: no need to call session_start since ID is " . $sid;
exit;
}
будет отображать Да?
- Нет, это так не работает.
Чтобы проверить, существует ли сессия, нужно позвонить session_start()
до session_id()
. Но подождите ... если сеанс ранее не существовал (или его срок истек) session_start()
создает сеанс . Таким образом, вызов session_id()
после session_start()
вряд ли вернет пустой результат и не будет иметь большого смысла, если кто-то захочет проверить, существует ли сеанс. Неужели?
- На самом деле это имеет / может иметь смысл. Зависит от ваших привычек программирования.
Это немного похоже на require
и require_once
... У меня нет require_once
в моих программах PHP. Потому что требует только тогда, когда это необходимо, и был бы более чем рад получить Фатальную ошибку , сообщающую, что require было сделано дважды: означает ошибку.
То же самое и с сеансами: я вызываю session_start()
один раз в начале или вообще не, в зависимости от контекста, поэтому его нельзя вызвать дважды (или фатальная ошибка). Но я предполагаю, что некоторым людям нужно session_id()
, чтобы сообщить им, если session_start()
уже был вызван ранее в том же запросе . Это где session_id()
имеет смысл ...