2015-09-03 3 views
2

Я искал и искал и читал и читал много о том, что именно делает session_destroy! но никакого результата, по крайней мере, для меня! сначала прочитайте детали ниже:obscurity about session_destroy

При создании сеанса (session_start) создается файл с уникальным идентификатором, который выдается пользователю в виде печенья, когда переменных в массиве $ _SESSION измененных или добавил временный файл обновляется с этой информацией, так что она может быть использована где-то еще на сайте. *

session_destroy * будет удалить этот файл, это обычно делается, когда пользователь входит из вашего веб-сайта, так что ненужный и ненужный файл не занимает места.

мы знаем, что идентификатор сессии хранится в куки сессии и, как говорят учебники, сессия уничтожить удаляет файл куки сессии (который включает в себя session_id), так почему, когда я начал новую сессию не порождало новый идентификатор ! это меня смущает! Посмотрите на пример:

<?php 
    session_start(); 
    echo session_id(); 
    session_destroy(); 
    session_start(); 

    echo "---".session_id(); 
?> 

результат: l4k80dkrl5kd6cdlobhbu5s3i1 --- l4k80dkrl5kd6cdlobhbu5s3i1

так что это дает мне идентификатор сессии такой же, как и предыдущий.

так что сеанс_destroy действительно !! ?

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

ответ

2

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

Это не снята с охраны любого из глобальных переменных, связанных с или отключить файл cookie сеанса.

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

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

+0

Итак, что такое файл сеанса? –

+0

Файл сеанса, о котором мы говорим, является обычным файлом, созданным на стороне сервера, файлы cookie хранятся на стороне клиента ... приходят ребята! –

+0

Некоторые текстовые файлы, содержащие данные сеанса, на сервере – Ahmad

1

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

+0

Так почему это должно произойти? Когда я удалил сессию cookie с сеансом destroy! Как получить идентификатор сеанса? – mehdi

+0

Как вы удалили cookie сессии? –

+0

Вызов session_destroy – mehdi

Смежные вопросы