За последние 24 часа нас посетили 17576 программистов и 1725 роботов. Сейчас ищут 885 программистов ...

Как убить сессию и при этом вернуть сраничке изначальный вид

Тема в разделе "PHP для новичков", создана пользователем blondinka, 8 июн 2017.

  1. blondinka

    blondinka Новичок

    С нами с:
    8 июн 2017
    Сообщения:
    25
    Симпатии:
    1
    Всем привет! Проблема такая, (вся драма разворачивается на страничке index.php) У меня форма авторизации видна по условию if(!isset($_SESSION['user']) ).
    Существует ссылка
    В html <a href="index.php" onclick="return Murder_Session();">exit</a>
    По клику по логике должны попадать в скрипт, он внизу рядом с закрывающем body
    Скрипт такой
    PHP:
    1. <script>
    2.     function Murder_Session(){ return $_GET['logout']   = TRUE;}
    3. </script>
    4.  
    5. в phph  написано
    6. <?php session_start();
    7. if(isset($_GET['logout'])){
    8. unset($_SESSION['user'];
    9. }
    В начале все идет хорошо,сессия создается, юзера в бд находит,говорит ему привет и форму перестает показывать. Но надо чтоб по клику на ссылку exit мы выставляли $_GET['logout']. Похоже что я не попадаю в эту функцию даже. Я туда пробовала сразу unset писать, тоже ничего. unset($_SESSION['user') не происходит. Я вижу ссессия продолжает торчать в папке tmp. Это мой первый сайт, и я думаю что возможно чего то очень важного не знаю. Цель - чтоб по клику на ссылку exit сессия убивалась а страничка приобретала свой первоначальный вид с формой авторизации.
    Подскажите пожалуйста, опытные разработчики, как подойти к проблеме.
     
    #1 blondinka, 8 июн 2017
    Последнее редактирование модератором: 8 июн 2017
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    denis01 нравится это.
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Это типа JS?
    HTML:
    1.  <a href="index.php/exit=true">exit</a>
     
  4. blondinka

    blondinka Новичок

    С нами с:
    8 июн 2017
    Сообщения:
    25
    Симпатии:
    1
    я наверно непонятно написала. нет я не путаю. все где положено ему быть. Вопрос задам иначе...должно ли из папки tmp где висит сессия , сессия изчезать по unset? и можно ли поссылке возвращать странице ее вид изначальный? когда форма была видна?
     
  5. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @blondinka, я выше не тот индекс прописал, попробуй так:
    HTML:
    1. <a href="index.php/?logout=true">exit</a>
    а в обработчике:
    PHP:
    1. if(isset($_GET['logout'])){
    2. }
     
  6. blondinka

    blondinka Новичок

    С нами с:
    8 июн 2017
    Сообщения:
    25
    Симпатии:
    1
    Спасибо большое,она убилась и страничка появилась без css правда, но все же дело сдвинулось с мертвой точки. А в принципе, это нормально так вот реализовывать exit для пользователья? Сам способ у меня приемлемый? А у странички теперь адрес имя сайта/index.php/index.php.
    И html тот же самый. и форма видна. Но css почему -то пропал в процессе.
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @blondinka, вот это странно. Так не должно быть.
    --- Добавлено ---
    Движок самопис?
    --- Добавлено ---
    @blondinka, покажите как вы прописываете стили. Их лучше прописывать всегда от корня сайта.
     
  8. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    @blondinka, у Вас ссылка неверная
    HTML:
    1. <a href="?logout">exit</a>
    JavaScript функция Вам вообще не нужна.
    В PHP коде у Вас всё в порядке!

    Единственное, я бы добавил перенаправление, чтобы убрать из адреса строки ?logout:
    PHP:
    1. <?php
    2. if (isset($_GET['logout'])) {
    3.     unset($_SESSION['user'];
    4.     header('Location: index.php');
    5.     exit;
    6. }
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Ну, зачем unset надо просто дестроить сессию))
    --- Добавлено ---
    @blondinka,
    HTML:
    1. <a href="/index.php/?logout=true">exit</a>
    2.  
    забыл слэш поэтому так вышло. Теперь будет все ок.
     
  10. blondinka

    blondinka Новичок

    С нами с:
    8 июн 2017
    Сообщения:
    25
    Симпатии:
    1
    я прописываю в meta . там ссылка на файл css. Спасибо за ответы
    --- Добавлено ---
    О, все получилось . если "?logout" Большое большое спасибо :)
     
  11. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Затем, что в сессии могут хранится данные и для неаутентифицированного пользователя.
     
  12. blondinka

    blondinka Новичок

    С нами с:
    8 июн 2017
    Сообщения:
    25
    Симпатии:
    1
    точно, javascript оказался вообще тут не при чем....
     
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @neverlose, у кого как, в принципе такой метод тоже прокатывает.
    Он лишен смысла)
     
  14. blondinka

    blondinka Новичок

    С нами с:
    8 июн 2017
    Сообщения:
    25
    Симпатии:
    1
    работает теперь и с вариантом unset и с session_desrtroy....Я в первый раз на форуме, очень благодарю :)
     
  15. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    У кого-то прокатывает и на экзамене списывать, когда преподаватель не видит.
    Нужно делать как правильно, а не как прокатывает. Тем более если даёшь совет или обучаешь.
     
  16. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @neverlose, тогда делай как правильно.
    --- Добавлено ---
    Дестрой сессию как положено и не майся ерундой))
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Чем тебе сессия-то помешала? unset проще - не надо думать о том, что там ещё лежит
     
  18. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @mkramer, текущий сеанс пользователя завершен, и поэтому не важно что там лежит а что не лежит, и мы дестроим сессию. Кстати, в твоем любимом yii так и делают.
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Не-а, дают мне выбрать, крушить мне сессию или нет
    PHP:
    1. public function logout($destroySession = true)
    2. {
    3.     $identity = $this->getIdentity();
    4.     if ($identity !== null && $this->beforeLogout($identity)) {
    5.         $this->switchIdentity(null);
    6.         $id = $identity->getId();
    7.         $ip = Yii::$app->getRequest()->getUserIP();
    8.         Yii::info("User '$id' logged out from $ip.", __METHOD__);
    9.         if ($destroySession && $this->enableSession) {
    10.             Yii::$app->getSession()->destroy();
    11.         }
    12.         $this->afterLogout($identity);
    13.     }
    14.  
    15.     return $this->getIsGuest();
    16. }
    Я могу сессию много для чего использовать, помимо работы с ID пользователя.
     
  20. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @mkramer, я не про это. я про то, что они unset не юзают, юзают session_destroy.
    --- Добавлено ---
    Конечно сначала нужно позабитоться завершения всех запросов делать все аккуратно, когда у тебя сложное приложение.
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @mahmuzar, если я туда false передам, то просто удалят id, т.е. сделают unset() :)
    PHP:
    1. public function remove($key)
    2. {
    3.     $this->open();
    4.     if (isset($_SESSION[$key])) {
    5.         $value = $_SESSION[$key];
    6.         unset($_SESSION[$key]);
    7.  
    8.         return $value;
    9.     } else {
    10.         return null;
    11.     }
    12. }
    Ну и это у них, чтоб на любой вкус :) Когда я без них пишу, делаю unset, и радуюсь.
     
  22. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @mkramer, ну так я его не проклинал за это)) Он настаивает как правильно. Вообще если делать правильно, и приложение правильно спроектировано. делаешь дестрой и радуешься жизни))
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Сессия не только для аутентификации/авторизации. Я туда могу класть всё, что мне заблагорассудится :) Поэтому и вариант без дестрой тоже правильный.
     
  24. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @mkramer, я понял, можно. Но текущий сенс завершен, я поэтому дестрою. А если что-то там есть что предназначено для меня же только не автоизованного, скорее нужно реализовать механизм который их обратно туда загонит. Ну как работает кэш.