неизвестность о session_destroy

я искал и искал, и читал, и читал много о том, что именно делает 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 !! ?

заранее спасибо

2

Решение

Из документации PHP:

Он не сбрасывает ни одну из глобальных переменных, связанных с
сеанс или сброс файла cookie сеанса.

Так после session_destroy() cookie, содержащий идентификатор сеанса, все еще жив, и будет удален только файл сеанса. Так start_session() пытается найти файл для идентификатора сеанса в файле cookie, но это, конечно, не удается, и он просто создает новый пустой файл для этого. Таким образом, ваш идентификатор не меняется.

Если вы действительно хотите это изменить, попробуйте удалить cookie.

2

Другие решения

Вы почти правы в том, что вы сказали, НО если вы уничтожаете сеанс и скрипт заканчивается на 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.

1

По вопросам рекламы [email protected]