Я работал с сессиями PHP, и все работает нормально, он делает именно то, что мне нужно.
Затем я начал изучать потенциальные проблемы безопасности и обнаружил следующее:
http://phpsec.org/projects/guide/4.html
Обратите внимание, что все, что использовалось для определения существующего сеанса или нового сеанса 'status', это:
session_start();
... и все же я уже много раз видел подобные вещи:
<?php
if (isset($PHPSESSID))
{
session_start($PHPSESSID);
}else{
session_start();
};
?>
Я предполагал, что это позволит некоторую другую обработку при втором вызове или что, по его логике, сеанс может быть перезапущен с тем же идентификатором сеанса, например, для другой страницы.
Однако я уже думал, что у простого session_start()
уже есть логика, чтобы определить, был ли сеанс установлен в другом месте, потому что он «знает», чтобы сохранить существующий идентификатор сеанса, а не выдавать новый, если, конечно, это не нужно!
Итак, я проверил вышесказанное и не смог заставить его работать вообще.
<?php
if (isset($PHPSESSID))
{
$oldsession = "On";
$newsession = "Off";
session_start($PHPSESSID);
}
else
{
session_start();
$newsession = "On";
$PHPSESSID = session_id( );
};
echo 'ClientSessionID : '.$PHPSESSID.'<br>';
echo 'Refreshed Session : '.$oldsession.'<br>';
echo 'New Session : '.$newsession.'<br>';
?>
Либо я что-то упустил, либо этот код никогда бы не сработал. $oldsession
НИКОГДА не получает эхо, даже если сеанс сохраняется. Я делаю вывод, что тест на $PHPSESSID
никогда не работает.
Итак, мой вопрос: если предположить, что пример тестового кода синтаксически корректен, возможно ли даже попытаться предварительно определить «статус» сеанса ДО вызова session_start()
? И если так, как бы вы поступили?
Как показывает статья, использование (предполагаемых) результирующих переменных сеанса после начала сеанса - это единственный способ отправить код в другом направлении, поэтому я думаю, что на самом деле это единственный способ сделать это.