Сессии. Кнопка Выход.

Ms

Новичок
Сессии. Кнопка Выход.

Существует форум. там можно зарегистрироваться. Требуется сделать кнопку "Выход", причём при нахатии на эту кнопку должно перебрасывать на exit.php
Требуется - убить сесиию. Полностью.

Можно, конечно, ввести некоторую переменную, например:
$_SESSION['auth']=1;
а в exit.php прописать, что
$_SESSION['auth']=0;
но, мне кажется, это не самый лучший вариант, т.к. сессию требуется убить полностью.

Каково должно быть содержание exit.php?
 

_eXpLoReR_

Guest
session_start();
unset($_SESSION['key']);
session_destroy();
header("Location: your.php");
 

Кром

Новичок
_eXpLoReR_
Это неправильное решение. Не надо так делать и советовать.
 

mishabmw

Guest
Автор оригинала: Кром
_eXpLoReR_
Это неправильное решение. Не надо так делать и советовать.
Чего там такого неправильного?

Хотя я бы и не убивал сессию, вроде бы при переходе с помощью хидера, значение сессии не сохраняется
 

Кром

Новичок
Вся информация которая вас интересует есть по ссылке которую дал Romantik.
Для тех кому лень кликнуть, один раз объясняю. Сессии - это механизм, который позволяет сохранять какие либо значения между обращениями к серверу. И убивать/разрушать этот механиз нет никакого смысла. Там храняться переменные, данные. Вот с ними и работайте. Их уничтожайте, меняйте и т.д. А саму сессию трогать не надо.

Пример. У вас есть база данных, в ней таблицы. Вы же не чистите все таблицы, когда вам нужно удалить какое-то значение. Вы находите его по id или другим параметрам и удаляете. Тот же самый принцип нужно применять и к сессиям. Найти нужную переменную и почистить ее.

Работая по принципу session_destroy() вы в дальнейшем обязательно наткнетесь на косяки. Сессия это своеобразная временная база данных для вашего сайта. И когда с ней начнуть работать различные модули вы перестанете понимать, почему модуль news ложит туда данные, а модуль downloads их трет.

При командной работе это будет вообще завал. За такой подход могут руки поотрывать. :)
 

sal

Новичок
Кром
Пример. У вас есть база данных, в ней таблицы. Вы же не чистите все таблицы, когда вам нужно удалить какое-то значение. Вы находите его по id или другим параметрам и удаляете. Тот же самый принцип нужно применять и к сессиям. Найти нужную переменную и почистить ее.
ИМХО, не удачный пример. Данные в базе носят перманентный характер, а сессия сама по себе явление временное, отпала необходимость в сессии ее нужно удалить (несмотря на то что PHP сам подчищает за собой мусор).
Работая по принципу session_destroy() вы в дальнейшем обязательно наткнетесь на косяки. Сессия это своеобразная временная база данных для вашего сайта. И когда с ней начнуть работать различные модули вы перестанете понимать, почему модуль news ложит туда данные, а модуль downloads их трет.
А давайте предположим другой случай. Вы открыли сессию, зарегестрировали пользователя, скажем для этого создали в сессии переменную name. Потом в результате действий пользователя у вас появилась переменная items в которой хранятся важные для текущего пользователя данные. После чего пользователь нажал кнопку выход. Мы сделали unset для name. После чего заходит другой пользователь (в пределах этой же сессии!) мы опять устанавливаем его имя и вдруг оказывается что переменная itmes сохранилась от старого пользователя.
Предположим что для каждого нового пользователя мы будем создавать новую сессию! Но не будем уничтожать старую, действиительно за нас это сделает сам PHP. НО! Что если у нас отключены куки и индефикатор сессии передается методом GET. Мы выходим делаем unset для name за нами садится другой человек смотрит в истории идентификатор сессии и спокойно получает доступ к сесси (случай конечно спорный мы можем проверять установлено ли имя и если его нет ничего с сессией не делать, но что если пользователь может получить доступ к серверу и запустить свой скрипт где зная идентификатор сесси он сможет узнать какие данные не уничтожены).
Выход делать unset для всех данных. Но готов поспорить любой программист рано или поздно это забудет сделать. Более удачно, на мой взгляд, уничтожать сессию!
 

Кром

Новичок
Требуется - убить сесиию. Полностью.
Здесь поможет только session_destroy.
itprog
На самом деле ничего там не требуется. Просто разработчик еще не знает точно, что ему нужно.

sal
То что ты описал - это неудачный пример работы с сессиями, не более того.

>Мы выходим делаем unset для name за нами садится другой человек смотрит в истории идентификатор сессии и спокойно получает доступ к сесси

Каким это образом он получает доступ? Благодаря наличию мусора оставшегося в переменной itmes? Т.е. ты иногда идентифицируешь пользователя по name, и иногда по всякому хламу?
Придумай более оригинальный пример.
 

BuTbKa

Новичок
session_start();
$_SESSION=array();
Header('Location:index.php')

Либо
session_start();
$_SESSION['имя пременной сессии']=null;
так для каждой переменной
Header('Location:index.php')
 

sal

Новичок
Кром

Я бы ответил на твой пост, но боюсь что это злостный офтопик. А по шапке я сегодня уже получил :)
 

Оливер Перри

Новичок
Автор оригинала: sal
Кром

После чего заходит другой пользователь (в пределах этой же сессии!)
Слышь? А как другой пользователь может оказаться в пределах этой же сессии?

Я за session_destroy(); После вызова этой функции удаляется сам файл сессии, а после unset() удаляется переменная, вы можете удалить все переменные (а их может быть очень много), но при этом останется пустой файл сессии, а кому он нужен если пользователь сознательно жмет на выход и хочет покинуть сайт?

Сессия это своеобразная временная база данных для вашего сайта. И когда с ней начнуть работать различные модули вы перестанете понимать, почему модуль news ложит туда данные, а модуль downloads их трет.
Тебя послушать так ты и переменные к базе данных отнесешь.
Сессия для того и служит чтобы хранить значения переменных, касающиеся только одного пользователя, но никак ни целого сайта.

Так что
session_destroy(); !!!!!;)
 

sal

Новичок
Оливер Перри

Ну например если ты нажал кнопку "выход" в форме(например у тебя почтовый ящик с веб интерфейсом), удаление сессии ты не делал, в куках сохранился ее индефикатор, а на сервере файлик с переменными старой сессии, другой человек сел за ту же машину (браузер не закрыт при этом был) и решил зайти в свой акаунт(продолжаем пример с почтой). В таком случае на сколько я понимаю индефикатор сессии будет опять отправлен на сервер и будет получен доступ к данным не уничтоженной сесси. Или я не прав?
Я и сам понимаю, что пример притянут за уши. Но лично я считаю, что любые не удаленные данные (особенно если мы явно знаем что пользователь вышел) могут быть использованы не по назначению.
Так же я понимаю, что завязываться на индефикатор сесси в целях авторизации весьма глупо!
 
Сверху