я искал и искал, и читал, и читал много о том, что именно делает session_destroy! но никакого результата по крайней мере для меня! Сначала прочитайте детали ниже:
Когда создается сеанс (session_start), файл создается с
уникальный идентификатор, который предоставляется пользователю в виде файла cookie, когда
переменные в массиве $ _SESSION модифицируются или добавляются временные
файл обновляется с этой информацией, так что он может быть использован где-то
остальное на сайте. *session_destroy * удалит этот файл, это обычно делается, когда
пользователь выходит из вашего сайта, так что (теперь бесполезно и
не нужно) файл не занимает места.
мы знаем, что идентификатор сессии хранится в файле cookie сеанса, и, как говорится в руководствах, уничтожение сеанса удаляет файл cookie сеанса (который включает session_id), поэтому, когда я начал новый сеанс, он не генерировал новый идентификатор! это меня смущает! посмотрите на пример :
<?php
session_start();
echo session_id();
session_destroy();
session_start();
echo "---".session_id();
?>
результат: l4k80dkrl5kd6cdlobhbu5s3i1 — l4k80dkrl5kd6cdlobhbu5s3i1
поэтому он дает мне идентификатор сессии такой же, как и предыдущий.
Так что же делает session_destroy !! ?
заранее спасибо
Из документации PHP:
Он не сбрасывает ни одну из глобальных переменных, связанных с
сеанс или сброс файла cookie сеанса.
Так после session_destroy()
cookie, содержащий идентификатор сеанса, все еще жив, и будет удален только файл сеанса. Так start_session()
пытается найти файл для идентификатора сеанса в файле cookie, но это, конечно, не удается, и он просто создает новый пустой файл для этого. Таким образом, ваш идентификатор не меняется.
Если вы действительно хотите это изменить, попробуйте удалить cookie.
Вы почти правы в том, что вы сказали, НО если вы уничтожаете сеанс и скрипт заканчивается на PHP, то временный файл удаляется. Если вы просто попытаетесь уничтожить и создать его снова, он использует тот же идентификатор файла / сеанса.
Это не только файл, который создается, но и файл содержит все данные, которые вы храните в сеансе. Посмотрите на данные вашего сеанса на вашем сервере, это очень интересно.
Обновить
Более интересные вещи, которые вы можете сделать. Написать файл PHP
<?php
session_start();
sleep(29000);//delete the session after 29 seconds
session_destroy();
?>
Теперь посмотрите на файл сессии, он должен быть удален через 20 секунд.
Делать
<?php session_start(); ?>
и перейдите в Google Chrome, и удалите куки вручную оттуда. Сессия больше не будет доступна.
<?php session_destroy(); ?>
не будет уничтожать куки на
сторона клиента. В следующий раз, когда вы создадите сеанс, он будет использовать тот же
старая информация Это основная причина вашего вопроса.
Делать
file1:
<?php session_start(); $_SESSION['test'] = "A"; ?>
file2:
<?php session_start(); $_SESSION['test'] = "B"; ?>
resultFile:
<?php session_start(); echo $_SESSION['test']; ?>
Теперь с двух компьютеров зайдите на ваш сайт с file1 на одном компьютере и file2 на другом. В Google Chrome переключите информацию об их файлах cookie и посмотрите, как сеанс A назначается B, а B назначается A.