За последние 24 часа нас посетили 15740 программистов и 1666 роботов. Сейчас ищут 835 программистов ...

Помощь в коде, удаление сессии

Тема в разделе "PHP для новичков", создана пользователем [code], 14 июл 2014.

  1. [code]

    [code] Новичок

    С нами с:
    14 июл 2014
    Сообщения:
    32
    Симпатии:
    0
    Доброго времени суток!
    Нужна ваша помощь по вопросу удалении сессии. Да, я знаю про session_destroy(), но я хотел бы не просто удалить содержимое файла сессии на сервере, но и вообще убрать какую - то связь файла сессии на сервере с пользователем. Теоретически, это возможно, если отправить
    Код (Text):
    1. setcookie(session_name(),'');
    . Т.е. теперь при заходе пользователя на страницу, PHP больше не найдет свою сессию и создаст новую, а старая просто будет валяться на сервере. Так вот это у меня и не выходит, при отправке
    Код (Text):
    1. setcookie(session_name(),'');
    кука не изменяет свое значение на пустую строку, она вообще ничего не делает и кука остается в браузере с содержимым сессии. Ради эксперимента вместо пустой строки я отправил рандомное значение, к примеру, "qwerty", и после этого создалась еще одна кука с именем session_name() и значением "qwerty".

    Код (Text):
    1.  
    2. <?
    3.     header('Content-Type: text/html; charset=utf-8');
    4.     session_start();
    5.     $qwestions = parse_ini_file('qwestions.ini');
    6.     $i = 0;
    7.     $res = 0;
    8.     foreach ($qwestions as $answer){
    9.         $i++;
    10.         $q = 'q'.$i;
    11.         if (($_SESSION[$q]) == $answer) $res += 10;
    12.     }
    13.     setcookie(session_name(),'');
    14. ?>
    15. <br/>
    16. <? var_dump($_SESSION[q1]); ?> //выводит то, что лежит в сессии
    17. <br/>
    18. <? var_dump($_COOKIE[session_name()]);  ?> // string 'fuivut46es17bbge0vb2d1lkv0' (length=26) , т.е. кука не обнулена.
    А теперь эксперимент с другим значением:

    Код (Text):
    1.  
    2. <?
    3.     header('Content-Type: text/html; charset=utf-8');
    4.     session_start();
    5.     $qwestions = parse_ini_file('qwestions.ini');
    6.     $i = 0;
    7.     $res = 0;
    8.     foreach ($qwestions as $answer){
    9.         $i++;
    10.         $q = 'q'.$i;
    11.         if (($_SESSION[$q]) == $answer) $res += 10;
    12.     }
    13.     setcookie(session_name(),'qwerty');
    14. ?>
    15. <br/>
    16. <? var_dump($_SESSION[q1]); ?> //выводит то, что лежит в сессии
    17. <br/>
    18. <? var_dump($_COOKIE[session_name()]);  ?> // string 'qwerty' (length=6) , т.е.  кука с сессией не обнулена + создана еще одна кука с именем session_name(), а именно PHPSESSID, и значением 'qwerty'.
    Объясните, пожалуйста, почему так происходит и помогите решить проблему или подскажите другое решение разрыва связи пользователя и файла сессии на сервере.
    Если понадобится, то версия PHP 5.4.26, сервер Apache 2.2.27
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    зачем?
     
  3. [code]

    [code] Новичок

    С нами с:
    14 июл 2014
    Сообщения:
    32
    Симпатии:
    0
    Как минимум, в целях обучения. Мне лично непонятно, почему код себя так ведет. Я думаю, все дело в каких-то тонкостях, которые я по неопытности не знаю, но в каких?
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    добавляешь данные в сессию, после этого удаляешь куку и читаешь данные из суперглобального массива $_SESSION.
    Ты ошибся в порядке действий. Данные сессии помещаются в $_SESSION при вызове session_start(), а записываются в файл (или другое хранилище) после завершения скрипта. Таким образом, хоть ты и удалил куку PHPSESSID, но данные-то в массиве остались. Вот они и выводятся.

    так попробуй:
    первый вызов — положить данные в сессию
    второй — удалить куку
    третий — получить данные из сессии

    разумеется, в шагах 2 и 3 добавлять данные в сессию не надо
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Код (PHP):
    1. unset($_SESSION['qwerty']);
    все!
     
  6. [code]

    [code] Новичок

    С нами с:
    14 июл 2014
    Сообщения:
    32
    Симпатии:
    0
    Вообще меня не правильно понял и подсказал совсем не то.

    Большое спасибо! Попробовал поработать с этим и все получилось! Тему можно считать закрытой.