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

Как правильно удалить сессию?

Тема в разделе "PHP для новичков", создана пользователем Novi4ek_pro, 2 мар 2018.

  1. Novi4ek_pro

    Novi4ek_pro Новичок

    С нами с:
    11 мар 2015
    Сообщения:
    12
    Симпатии:
    1
    Добрый день! Уже который час пытаюсь решить следующую задачу.

    Обрабатываю форму. Если есть ошибки записываю в $_SESSION['error_form'] текст с ошибкой, если все удалось, то записываю $_SESSION['success_form'] текст, что все хорошо обработано.
    Далее делаю редирект на страницу с формой. Проверяю, есть ли сессия, которая отвечает за обработку форм, если да вывожу ошибку\успех.

    После вывода ошибки\текста, я хочу удалить эти сессии. И в итоге Сессии совсем пропадают эти, как будто и не приходили. Кто подскажет?


    Укорочу код:

    Страница cabinet.php, на которой форма и проверка сессии
    PHP:
    1. if (isset($_SESSION['success_form']) and !isset($_SESSION['error_form'])){
    2. echo $_SESSION['success_form'];
    3. unset($_SESSION['success_form']);
    4.  }
    5. else{
    6. echo $_SESSION['error_form'];
    7. unset($_SESSION['error_form']);
    8.  }
    9.  
    10.  
    11. <form class="login-form" action="/cabinet/edit" method="POST">
    12.       <input name="name" type="text" <? echo $name; ?> required>
    13.       <input name="email" type="email" <? echo $email; ?> required>
    14.       <input name="phone" type="phone" <? echo $phone; ?> required>
    15.       <input type="submit" name="submit" class="btn btn-default" value="Сохранить" />
    16.  
    17.     </form>

    файл с обработкой cabinet/edit.php

    PHP:
    1. $_SESSION['error_form']=false;
    2.  
    3. if (!User::checkName($name)) {
    4.                 $_SESSION['error_form']='Имя не должно быть короче 2-х символов';
    5.             }
    6.                    
    7.             if (!User::checkPhone($phone)) {
    8.                 $_SESSION['error_form']='Номер телефона должен состоять только из цифр (без "+" и других символов)';
    9.             }
    10.            
    11.             if (!User::checkEmail($email)) {
    12.                 $_SESSION['error_form']='Укажите верный E-mail адрес!';
    13.             }
    14.            
    15.            
    16.             if ($_SESSION['error_form']== false) {
    17.                 $result = User::edit($userId, $name, $password, $phone, $email, $email_old);
    18.                 $_SESSION['success_form']='Данные успешно изменены!';
    19.             }
    20.  
    21. header("Location: /cabinet");

    Если не удалять Сессии, то все работает прекрасно- результат показывает верно, но мне нужно удалить сессии после того, как они вывелись.
     
  2. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Вопрос, а где вы стартуете сессию?
     
    san4ez нравится это.
  3. san4ez

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

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    уверен что session_start(); везде есть?
     
  4. Novi4ek_pro

    Novi4ek_pro Новичок

    С нами с:
    11 мар 2015
    Сообщения:
    12
    Симпатии:
    1
    Сайт построен по MVC, все запросы проходят через Index.php, в корне сайта который, там стартуют сессии
     
  5. san4ez

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

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    проблем в коде, который дали вы, нет. (у меня по крайней мере все работает).
     
  6. Novi4ek_pro

    Novi4ek_pro Новичок

    С нами с:
    11 мар 2015
    Сообщения:
    12
    Симпатии:
    1
    И нормально стираются после показа?
     
  7. san4ez

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

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    да
     
  8. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Сделайте var_dump($_SESSION) и var_dump($_COOKIE) в проблемном месте
     
  9. Novi4ek_pro

    Novi4ek_pro Новичок

    С нами с:
    11 мар 2015
    Сообщения:
    12
    Симпатии:
    1
    делал, если не удалять после вывода сессии, то в дампе есть эти сессия, если вставляю функцию удаления сессии, то в дампе она даже не приходит.
     
    topas нравится это.
  10. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    вы имеете ввиду unset($_SESSION['что-то-там']);?
     
  11. Novi4ek_pro

    Novi4ek_pro Новичок

    С нами с:
    11 мар 2015
    Сообщения:
    12
    Симпатии:
    1
    Да, если я не удаляю ее, то проверка всех сессии проходит отлично и выводит нужную информацию.
    Как только я unset($_SESSION['что-то-там']);, то сессии как будто и не приходят на страницу.
     
  12. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    ну а var_dump($_COOKIE) делали?
    Там должен быть идентификатор сессии. Этот session_id не должен меняться между различными запросами. Если он есть, и не меняется, значит браузер честно его посылает и проблема на стороне сервера