Всем привет! Проблема такая, (вся драма разворачивается на страничке index.php) У меня форма авторизации видна по условию if(!isset($_SESSION['user']) ). Существует ссылка В html <a href="index.php" onclick="return Murder_Session();">exit</a> По клику по логике должны попадать в скрипт, он внизу рядом с закрывающем body Скрипт такой PHP: <script> function Murder_Session(){ return $_GET['logout'] = TRUE;} </script> в phph написано <?php session_start(); if(isset($_GET['logout'])){ unset($_SESSION['user']; } В начале все идет хорошо,сессия создается, юзера в бд находит,говорит ему привет и форму перестает показывать. Но надо чтоб по клику на ссылку exit мы выставляли $_GET['logout']. Похоже что я не попадаю в эту функцию даже. Я туда пробовала сразу unset писать, тоже ничего. unset($_SESSION['user') не происходит. Я вижу ссессия продолжает торчать в папке tmp. Это мой первый сайт, и я думаю что возможно чего то очень важного не знаю. Цель - чтоб по клику на ссылку exit сессия убивалась а страничка приобретала свой первоначальный вид с формой авторизации. Подскажите пожалуйста, опытные разработчики, как подойти к проблеме.
я наверно непонятно написала. нет я не путаю. все где положено ему быть. Вопрос задам иначе...должно ли из папки tmp где висит сессия , сессия изчезать по unset? и можно ли поссылке возвращать странице ее вид изначальный? когда форма была видна?
@blondinka, я выше не тот индекс прописал, попробуй так: HTML: <a href="index.php/?logout=true">exit</a> а в обработчике: PHP: session_start(); if(isset($_GET['logout'])){ session_destroy(); }
Спасибо большое,она убилась и страничка появилась без css правда, но все же дело сдвинулось с мертвой точки. А в принципе, это нормально так вот реализовывать exit для пользователья? Сам способ у меня приемлемый? А у странички теперь адрес имя сайта/index.php/index.php. И html тот же самый. и форма видна. Но css почему -то пропал в процессе.
@blondinka, вот это странно. Так не должно быть. --- Добавлено --- Движок самопис? --- Добавлено --- @blondinka, покажите как вы прописываете стили. Их лучше прописывать всегда от корня сайта.
@blondinka, у Вас ссылка неверная HTML: <a href="?logout">exit</a> JavaScript функция Вам вообще не нужна. В PHP коде у Вас всё в порядке! Единственное, я бы добавил перенаправление, чтобы убрать из адреса строки ?logout: PHP: <?php session_start(); if (isset($_GET['logout'])) { unset($_SESSION['user']; header('Location: index.php'); exit; }
Ну, зачем unset надо просто дестроить сессию)) --- Добавлено --- @blondinka, HTML: <a href="/index.php/?logout=true">exit</a> забыл слэш поэтому так вышло. Теперь будет все ок.
я прописываю в meta . там ссылка на файл css. Спасибо за ответы --- Добавлено --- О, все получилось . если "?logout" Большое большое спасибо
работает теперь и с вариантом unset и с session_desrtroy....Я в первый раз на форуме, очень благодарю
У кого-то прокатывает и на экзамене списывать, когда преподаватель не видит. Нужно делать как правильно, а не как прокатывает. Тем более если даёшь совет или обучаешь.
@neverlose, тогда делай как правильно. --- Добавлено --- Дестрой сессию как положено и не майся ерундой))
@mkramer, текущий сеанс пользователя завершен, и поэтому не важно что там лежит а что не лежит, и мы дестроим сессию. Кстати, в твоем любимом yii так и делают.
Не-а, дают мне выбрать, крушить мне сессию или нет PHP: public function logout($destroySession = true) { $identity = $this->getIdentity(); if ($identity !== null && $this->beforeLogout($identity)) { $this->switchIdentity(null); $id = $identity->getId(); $ip = Yii::$app->getRequest()->getUserIP(); Yii::info("User '$id' logged out from $ip.", __METHOD__); if ($destroySession && $this->enableSession) { Yii::$app->getSession()->destroy(); } $this->afterLogout($identity); } return $this->getIsGuest(); } Я могу сессию много для чего использовать, помимо работы с ID пользователя.
@mkramer, я не про это. я про то, что они unset не юзают, юзают session_destroy. --- Добавлено --- Конечно сначала нужно позабитоться завершения всех запросов делать все аккуратно, когда у тебя сложное приложение.
@mahmuzar, если я туда false передам, то просто удалят id, т.е. сделают unset() PHP: public function remove($key) { $this->open(); if (isset($_SESSION[$key])) { $value = $_SESSION[$key]; unset($_SESSION[$key]); return $value; } else { return null; } } Ну и это у них, чтоб на любой вкус Когда я без них пишу, делаю unset, и радуюсь.
@mkramer, ну так я его не проклинал за это)) Он настаивает как правильно. Вообще если делать правильно, и приложение правильно спроектировано. делаешь дестрой и радуешься жизни))
Сессия не только для аутентификации/авторизации. Я туда могу класть всё, что мне заблагорассудится Поэтому и вариант без дестрой тоже правильный.
@mkramer, я понял, можно. Но текущий сенс завершен, я поэтому дестрою. А если что-то там есть что предназначено для меня же только не автоизованного, скорее нужно реализовать механизм который их обратно туда загонит. Ну как работает кэш.