Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 18

Сбрасываются сессии при переходе на другу страницу

10.05.2014, 20:42. Показов 4349. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть форма входа для пользователей.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
    if(isset($_SESSION['name']))
    {
        echo '<div class="otstup2">Вы вошли как '.$v_username.'
        <form action="ruregestration.php" method="post">
        <input type="submit" name="logout" value="Выйти">
        </form>
        </div>';
    }
    else
    {
        echo '<div class="otstup2"><form action="ruregestration.php" method="post">
        <table>
        <tr>
            <td><label for="v_username" class="vhod">Логин:</label></td>
            <td><input name="v_username" type="text" maxlength="20" placeholder=" Login" required class="vhod"></td>
        </tr>
        <tr>
            <td><label for="v_password" class="vhod">Пароль:</label></td>
            <td><input name="v_password" type="password" maxlength="20" placeholder=" Password" required class="vhod"></td>
        </tr>
        </table>
        <input type="submit" name="voiti" value="Войти">
        <a href="../ru/ruregestration.php">Зарегистрироваться</a></div>
        </form>';
    }
?>
if(isset($_SESSION['name'])) - плохо понимаю суть этой строчки. Но как я понимаю, если человек зашел и сессия открыта то у меня выводит "Вы вошли как "логин"" и кнопку для того чтоб разлогиниться.
Иначе выводит форму для входа.

Обработка формы входа.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    if(isset($_POST['voiti']))
    {
       $v_username = $_POST['v_username'];
       $v_password = md5($_POST['v_password']);
       $query = mysql_query("SELECT * FROM users WHERE username = '$v_username'");
       $user_data = @mysql_fetch_array($query);
       if($user_data['password'] == $v_password)
       {
            session_start();
            $_SESSION['name'] = $_POST['v_username'];
            setcookie($_POST['v_username'],$_POST['v_password'],time() +250000,"/");
       }
       else
       {
            header ('Location: rufail.php');
            exit();
       }
    }
Суть проблемы: Логинюсь. Форма для входа исчезает, пишет: "Вы вошли как "логин"". Все отлично. Как только перехожу на другую страницу опять вываливается форма входа. Перехожу опять на эту и опять вижу форму входа.
Жал Ф12 - заходил смотрел куки. Куки есть, правильные. Что не так то?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.05.2014, 20:42
Ответы с готовыми решениями:

Сессии не сохраняются при переходе на другую страницу
Привет всем. Цель кодов- в файле index.php следующий код: &lt;html&gt; &lt;head&gt; &lt;link rel=&quot;icon&quot;...

Потеря сессии при переходе на другую страницу без ссылки
Переход на другую страницу производится кодом $_SESSION = $url; echo &quot;&lt;HTML&gt;&lt;HEAD&gt;&lt;META HTTP-EQUIV='Refresh' CONTENT='0;...

Не работают сессии при переходе по страницам
Есть страница 1 &lt;?php session_start(); echo session_id(); $_SESSION='adsdasdasdas'; ?&gt; &lt;!doctype html&gt; &lt;html&gt; &lt;head&gt; ...

10
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
10.05.2014, 21:31
Лучший ответ Сообщение было отмечено Apamyc как решение

Решение

Цитата Сообщение от Apamyc Посмотреть сообщение
Суть проблемы: Логинюсь. Форма для входа исчезает, пишет: "Вы вошли как "логин"". Все отлично. Как только перехожу на другую страницу опять вываливается форма входа. Перехожу опять на эту и опять вижу форму входа.
Жал Ф12 - заходил смотрел куки. Куки есть, правильные. Что не так то?
Для корректной работы с сессиями необходимо добавить строку session_start() в начале каждого файла.
0
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 18
10.05.2014, 21:57  [ТС]
Вписал и после входа везде пропали формы для входа.
Но мне кажется, что надо сделать какую-то проверку, а не просто поставлять везде session_start() ?
И при нажатии Ф12 не видно теперь куков в браузере.
И выскакивает ошибка
Warning: Cannot modify header information - headers already sent by (output started at Q:\home\apamyc.ru\www\ru\ruregestration. php:5) in Q:\home\apamyc.ru\www\ru\ruregestration. php on line 54

Добавлено через 5 минут
Простите, я лох) Ошибку не выдает, куки сохраняет)
0
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 18
10.05.2014, 22:07  [ТС]
Тогда еще такой вопрос.
Как использовать куки, чтобы при закрытии и открытии браузера оно не разлогинивалось?
В данный момент переходит по страницам хорошо, но при закрытии и открытии браузера опять выпадает форма входа.

И еще один вопрос.
При логоуте выдает ошибку:
Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in Q:\home\apamyc.ru\www\ru\ruregestration. php on line 64

Обработка логаута:
PHP
1
2
3
4
5
6
if(isset($_POST['logout']))
    {
        setcookie($_POST['v_username'],$_POST['v_password'],time() -250000,"/");
        unset($_SESSION['name']);
        session_destroy();
    }
line 64 это session_destroy();

Добавлено через 20 секунд
Тогда еще такой вопрос.
Как использовать куки, чтобы при закрытии и открытии браузера оно не разлогинивалось?
В данный момент переходит по страницам хорошо, но при закрытии и открытии браузера опять выпадает форма входа.

И еще один вопрос.
При логоуте выдает ошибку:
Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in Q:\home\apamyc.ru\www\ru\ruregestration. php on line 64

Обработка логаута:
PHP
1
2
3
4
5
6
if(isset($_POST['logout']))
    {
        setcookie($_POST['v_username'],$_POST['v_password'],time() -250000,"/");
        unset($_SESSION['name']);
        session_destroy();
    }
line 64 это session_destroy();

Добавлено через 3 минуты
И я так понял, что надо записывать куки так:
PHP
1
2
            setcookie('password',$_POST['v_password'],time() +250000,"/");
            setcookie('username',$_POST['v_username'],time() +250000,"/");
А не так:
PHP
1
setcookie($_POST['v_username'],$_POST['v_password'],time() +250000,"/");
Да? Но как их использовать?)
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
10.05.2014, 22:36
Цитата Сообщение от Apamyc Посмотреть сообщение
Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in
Видимо нету session_start() в этом файле.
Цитата Сообщение от Apamyc Посмотреть сообщение
Да? Но как их использовать?)
$_COOKIE['username'].
0
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 18
10.05.2014, 23:18  [ТС]
Смотри.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    if(isset($_POST['voiti']))
    {
       $v_username = $_POST['v_username'];
       $v_password = md5($_POST['v_password']);
       $query = mysql_query("SELECT * FROM users WHERE username = '$v_username'");
       $user_data = @mysql_fetch_array($query);
       if($user_data['password'] == $v_password)
       {
            session_start();
            $_SESSION['name'] = $v_username;
            setcookie('password',$_POST['v_password'],time() +250000,"/");
            setcookie('username',$_POST['v_username'],time() +250000,"/");
       }
       else
       {
            header ('Location: rufail.php');
            exit();
       }
    }
    
    if(isset($_POST['logout']))
    {
        setcookie('password',$_POST['v_password'],time() -250000,"/");
        setcookie('username',$_POST['v_username'],time() -250000,"/");
        unset($_SESSION['name']);
        session_destroy();
    }
Первый иф - это логин. Второй иф - это логаут.

Вот в первом ифе, при удачном входе - session_start();
Во втором ифе, при нажатии на "Выход" - session_destroy();
Оно как бы выходит, куки чистит, все хорошо, все делает, но только ошибку чего-то пишет)
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
11.05.2014, 00:01
Цитата Сообщение от Apamyc Посмотреть сообщение
Вот в первом ифе, при удачном входе - session_start();
Во втором ифе, при нажатии на "Выход" - session_destroy();
Оно как бы выходит, куки чистит, все хорошо, все делает, но только ошибку чего-то пишет)
Еще раз повторюсь, для правильной работы с сессиями, в начале каждого файла, в котором вы обращаетесь к сессиям (к массиву $_SESSION) необходимо писать session_start(). Функцию session_destroy() нельзя писать, не начав эту сессию..
0
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 18
11.05.2014, 00:10  [ТС]
Я или туплю жестко или не знаю в чем дело)

Я сначала, логинюсь, ввожу логин, затем пароль, затем жму кнопку Войти.
PHP берем логин, ищет такой же логин в моей базе данных. Затем берет все данных по этой записи и запихивает их в массив. Затем PHP сравнивает пароли и если они верны, то выполняет следующие действия:

PHP
1
2
3
4
    session_start();
            $_SESSION['name'] = $v_username;
            setcookie('password',$_POST['v_password'],time() +250000,"/");
            setcookie('username',$_POST['v_username'],time() +250000,"/");
То есть, как я понимаю, мы начинаем сессию. Т.к. есть запись session_start();
Далее пропадает форма входа, появляется запись "вы вошли как "логин"". И лишь тогда появляется кнопка логаута, лишь тогда появляется возможность использовать session_destroy().
На сколько я понимаю, я использую session_destroy() лишь после session_start().

Я возможно где-то понимаю что-то не так?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
11.05.2014, 01:38
Лучший ответ Сообщение было отмечено Apamyc как решение

Решение

Цитата Сообщение от Apamyc Посмотреть сообщение
На сколько я понимаю, я использую session_destroy() лишь после session_start().
Только если у Вас $_POST['voiti'] и $_POST['logout'] передаются одновременно, то есть выполняются оба условия. В чем я сомневаюсь... А так Вы выполняете либо только session_start() Либо только session_destroy(). А session_destroy() может следовать в скрипте только если там был session_start()...
0
0 / 0 / 0
Регистрация: 11.05.2014
Сообщений: 4
11.05.2014, 12:39
везде проставить session_start() и session_destroy()
0
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 18
11.05.2014, 14:30  [ТС]
Цитата Сообщение от pav1uxa Посмотреть сообщение
Только если у Вас $_POST['voiti'] и $_POST['logout'] передаются одновременно, то есть выполняются оба условия. В чем я сомневаюсь... А так Вы выполняете либо только session_start() Либо только session_destroy(). А session_destroy() может следовать в скрипте только если там был session_start()...
Спасибо большое, наконец-то разобрался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.05.2014, 14:30
Помогаю со студенческими работами здесь

Потеря сессии при переходе между двумя Php кодами по a.href
Здравствуйте. Возникла обычная проблема потери сессии при переходе в таком html коде: &lt;a...

поиск по бд при переходе на страницу
Здравствуйте. Скажите пожалуйста, можно ли сделать чтобы при переходе по ссылке на страницу производился поиск по бд?

POST переменные при нажатии на ссылку и при переходе на другую страницу
Как сделать так, чтобы при нажатии на ссылку и при переходе на другую страницу были доступны $_POST переменные (например listbox)?

404 при переходе на другую страницу
Собственно. есть 2 представления. на первом(index) есть кнопка &lt;input type=button name=btnShow value='press me' class='btt'...

Меню при переходе на страницу схлопывается
Приветствую. Выдрал с какого то сайта такой код: &lt;script src=&quot;http://code.jquery.com/jquery-latest.js&quot;&gt;&lt;/script&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru