Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запись временных данных в $_SESSION

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Hapson
Отправлено: 02 Августа, 2013 - 01:45:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


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

Ну с выводом форм кое как разбираюсь. Но вот еще возникла необходимость выводить над формой сообщение. К примеру, если пользователь ввел некорректные данные или не заполнил поля, то выводится одна и та же форма, которая лежит в отдельном файлике. Однако, нужно над формой писать разные сообщения, типа введены не все данные и данные не верны.

Долго думал, как передать из модуля авторизации переменную с сообщением. И решил попробовать через сессию. И какого же было мое удивление, что строка записалась в $_SESSION без session_start(). То есть я не стартовал сессию, а просто написал
$_SESSION['auth_incorrect'] = 'Данные не верны';

Это нормально? Можно ли вообще пользоваться $_SESSION для передачи данных между перегрузками страницы? К примеру написать class MessageHandler{}, который будет ловить месседжи и ерроры в $_SESSION ??


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Okula
Отправлено: 02 Августа, 2013 - 01:52:26
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Hapson, возможно в php.ini включен параметр session.auto_start, или же сессия была запушена в другом файле, подключаемом ранее.
 
 Top
Hapson
Отправлено: 02 Августа, 2013 - 01:54:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


Okula
Нет, session.auto_start off
а session_start() я закомментировал специально.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Okula
Отправлено: 02 Августа, 2013 - 01:58:27
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Тогда это магия вуду)))
Надеюсь записывал данные в переменную $_SESSION и использовал эту переменную ты не в 1-ом файле?
 
 Top
Hapson
Отправлено: 02 Августа, 2013 - 02:01:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


Okula пишет:
Тогда это магия вуду)))
Надеюсь записывал данные в переменную $_SESSION и использовал эту переменную ты не в 1-ом файле?

Нет. Задача-то и была записать переменную в одном файле, а вывести в другом после отправки поста.
(Добавление)
Проверил всю папку - везде закомментировал старт сессии и автостарт выключен


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DlTA
Отправлено: 02 Августа, 2013 - 09:16:58
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Hapson, а записанные данные вы в других файлах, без станта сессии тоже читаете?
 
 Top
Мелкий Супермодератор
Отправлено: 02 Августа, 2013 - 10:09:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




$_SESSION - суперглобальный массив.
В пределах скрипта ему нет разницы, был ли session_start, он останется суперглобальным. Но без старта сессии всё записанное сохранено в следующем вызове не будет.
Однако, не рекомендовал бы пользоваться этой особенностью. Это недокументированная особенность, может поменяться.


-----
PostgreSQL DBA
 
 Top
Hapson
Отправлено: 02 Августа, 2013 - 10:32:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


DlTA пишет:
Hapson, а записанные данные вы в других файлах, без станта сессии тоже читаете?

Записывал в одном, а читалось в другом.
Если $_SESSION подменял на простую переменную, то уже не прокатывало. Переменная, в которую я записал строку, в другом файле уже считалась не определенной, так как другой файл подключался после перезагрузки страницы.
(Добавление)
Мелкий пишет:
$_SESSION - суперглобальный массив.
В пределах скрипта ему нет разницы, был ли session_start, он останется суперглобальным. Но без старта сессии всё записанное сохранено в следующем вызове не будет.
Однако, не рекомендовал бы пользоваться этой особенностью. Это недокументированная особенность, может поменяться.

Понятно.
А я уже губу раскатал...
Я сделал старт сессии только тем, у кого есть идентификатор в куках. Видимо придется просто стартовать сессию в начале.
(Добавление)
ЗЫ
А нет ли еще способа передачи временных данных между скриптами, кроме гет и сессий.
Никак не могу красиво реализовать авторизацию.
Форму авторизации сделал вверху страницы - горизонтальную. Если пользователь правильно ввел email и password, то на этом же месте появляется приветствие. Здесь все просто - в скрипте авторизации в конце инклудится либо форма, либо приветствие, в зависимости от результата работы скрипта.
Однако, результатов не два, а много больше:

1. пользователь ввел не верные данные
2. ввел не все данные
3. нажал кнопку регистрации
4. нажал кнопку восстановления пароля...

Во всех этих случаях нужно выводить другие формы, но уже не вверху страницы, а в области контента.

Ну инклудить в область контента файлики с html формами я могу только через гет:

index.php?mod=auth&error=incorrect
index.php?mod=auth&error=empty_field
index.php?mod=auth&option=register
...

А вот как передать сообщение в эти формы я не знаю. Причем если пользователь ввел не верные данные или ввел не все данные, то инклудится одна и та же форма, а вот сообщения нужно вывести разные.

Как-то так...


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB