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
Форумы портала PHP.SU :: Версия для печати :: Запись временных данных в $_SESSION
Форумы портала PHP.SU » » Вопросы новичков » Запись временных данных в $_SESSION

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

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

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

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

Это нормально? Можно ли вообще пользоваться $_SESSION для передачи данных между перегрузками страницы? К примеру написать class MessageHandler{}, который будет ловить месседжи и ерроры в $_SESSION ??
2. Okula - 02 Августа, 2013 - 01:52:26 - перейти к сообщению
Hapson, возможно в php.ini включен параметр session.auto_start, или же сессия была запушена в другом файле, подключаемом ранее.
3. Hapson - 02 Августа, 2013 - 01:54:59 - перейти к сообщению
Okula
Нет, session.auto_start off
а session_start() я закомментировал специально.
4. Okula - 02 Августа, 2013 - 01:58:27 - перейти к сообщению
Тогда это магия вуду)))
Надеюсь записывал данные в переменную $_SESSION и использовал эту переменную ты не в 1-ом файле?
5. Hapson - 02 Августа, 2013 - 02:01:04 - перейти к сообщению
Okula пишет:
Тогда это магия вуду)))
Надеюсь записывал данные в переменную $_SESSION и использовал эту переменную ты не в 1-ом файле?

Нет. Задача-то и была записать переменную в одном файле, а вывести в другом после отправки поста.
(Добавление)
Проверил всю папку - везде закомментировал старт сессии и автостарт выключен
6. DlTA - 02 Августа, 2013 - 09:16:58 - перейти к сообщению
Hapson, а записанные данные вы в других файлах, без станта сессии тоже читаете?
7. Мелкий - 02 Августа, 2013 - 10:09:14 - перейти к сообщению
$_SESSION - суперглобальный массив.
В пределах скрипта ему нет разницы, был ли session_start, он останется суперглобальным. Но без старта сессии всё записанное сохранено в следующем вызове не будет.
Однако, не рекомендовал бы пользоваться этой особенностью. Это недокументированная особенность, может поменяться.
8. Hapson - 02 Августа, 2013 - 10:32:55 - перейти к сообщению
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
...

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

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

 

Powered by ExBB FM 1.0 RC1