Рассмотрим мой код ниже:
<?php
session_start();
if(!isset($_SESSION['count'])) $_SESSION['count']=0;
else ++$_SESSION['count'];
echo $_SESSION['count'];
?>
когда я вызываю это в моем браузере http://localhost/user_login.php?PHPSESSID=1234
когда я нажимаю перезагрузить несколько раз, я вижу, что мой счетчик увеличивается, однако, когда я печатаю
http://localhost/user_login.php?PHPSESSID=5678
и несколько раз я вижу, что он снова отсчитывает от 0.
Когда я оставляю счетчик с номером, отличным от первого, а затем возвращаюсь к первому URL, я вижу, что число снова меняется !! Кажется, что я создал две разные сессии, и я мог бы даже создать больше таким образом !!! Есть ли способ предотвратить счастье?
При таком подходе очень опасно, что злоумышленник сможет захватить любые сеансы, которые не были удалены или истекли.
Чтобы предотвратить это, добавьте простую проверку, чтобы изменить идентификатор сеанса с помощью session_regenerate_id
,
Эта функция сохраняет все текущие значения переменных сеанса, но заменяет идентификатор сеанса новым, который злоумышленник не может знать.
Для этого проверьте специальную переменную сеанса, которую вы произвольно изобрели. Если он не существует, вы знаете, что это новый сеанс, поэтому вы просто меняете идентификатор сеанса и устанавливаете специальную переменную сеанса, чтобы отметить изменение
Код:
<?php
session_start();
if(!isset($_SESSION['initiated'])){
session_regenerate_id();
$_SESSION['initiated']=1;
}
if(!isset($_SESSION['count'])) $_SESSION['count']=0;
else ++$_SESSION['count'];
echo $_SESSION['count'];
?>
Если вы хотите быть ультра параноиком, вы можете даже перегенерировать идентификатор сессии при каждом запросе.
Других решений пока нет …