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 :: не совсем понятна работа с сессиями.
Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2012
Помог: 0 раз(а)
Всем добрый вечер!
Я только начинаю пробовать программировать на PHP.
На текущий момент экспериментирую с созданием простой капчи.
вот столкнулся с интересным моментом.
есть код создания изображения на основании переменной и записи ее в сессии.
в index.php
файл подключается таким образом.
<img src = "captcha.php" />
а далее вызывается переменная из сессии
<?
session_start();
echo $_SESSION['captcha'];
session_destroy();
?>
но значение переменной и изображения не совпадает, хотя по идее должно.
Интересно почему так выходит?
ПС. Самое интересное при обновлении страницы код с изображения переходит в выдаваемый текст, а на изображении новый код.
В принципе скрипт работает так, как отправленный код с изображения полученные методом POST как раз будет соответствовать отстающему $_SESSION['captcha']
Буде благодарен тому, кто объяснит природу этого эффекта. Необходимо для дальнейшего понимания работы с сессиями.
NoPaper
Отправлено: 19 Июня, 2012 - 17:27:57
Посетитель
Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012 Откуда: Минск
Помог: 9 раз(а)
Здравствуй, скажу как я делал капчу на сайте.
На главной странице через <img src... вызывается скрипт капчи, есть поля формы для заполнения в том числе и поле 'cap' для ввода содержимого капчи. Потом все данные отправляются post'ом на скрипт do.php
(Добавление)
Все до ужаса просто Сначала из скрипта капчи берем картинку, в сессии сохраняем ее значение. Когда обращаемся к обработчику, там проверяем post и session, если они равны, то капча верна. Если нужно могу кинуть готовый скрипт с капчей.
piratexnik
Отправлено: 20 Июня, 2012 - 09:08:39
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2012
Помог: 0 раз(а)
Наверно не совсем правильно объяснил.
Капча работает.
Но, я попытался в главном файле сразу за выводом изображения вывести переменную из сессии.
И оказалось рисунок выведен, а переменной то еще нет.
Переменная записывается в сессию при обновлении формы или страницы. А в это время создается новый рисунок.
Вот и вызван вопрос. Если рисунок был создан, значит файл капчи выполнен, если выполнен, то где переменная?.
fdr21
Отправлено: 20 Июня, 2012 - 09:56:53
Гость
Покинул форум
Сообщений всего: 86
Дата рег-ции: Июнь 2012
Помог: 5 раз(а)
piratexnik пишет:
Наверно не совсем правильно объяснил.
Капча работает.
Но, я попытался в главном файле сразу за выводом изображения вывести переменную из сессии.
И оказалось рисунок выведен, а переменной то еще нет.
Переменная записывается в сессию при обновлении формы или страницы. А в это время создается новый рисунок.
Вот и вызван вопрос. Если рисунок был создан, значит файл капчи выполнен, если выполнен, то где переменная?.
можно взглянуть исходный код файла captcha.php
piratexnik
Отправлено: 20 Июня, 2012 - 10:51:03
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2012
мы запускаем, создаем новую сессию и изображение.
Так как сессии запускаются в заголовке документа, получить данные из новой сессии в этом контексте не получится.
И зачем оно вам нужно, все и так работает как нужно!
piratexnik
Отправлено: 20 Июня, 2012 - 15:10:26
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2012
Помог: 0 раз(а)
Цитата:
И зачем оно вам нужно, все и так работает как нужно!
Понадобилось случайно. Капча отказывалась принимать примерно один из трех вводов.
Поэтому решил сравнить получаемое изображение со значением, чтоб узнать в чем причина.
В любом случае спасибо полезно было узнать.
ПС. по эксперементировав с кодом.
Хоть и знаю что session_start(); желательно до вывода чего либо,
Все равно переменная опаздывает. Хотя по идее должна открываться уже новая только, что сгенерированная сессия?
fdr21
Отправлено: 20 Июня, 2012 - 15:28:09
Гость
Покинул форум
Сообщений всего: 86
Дата рег-ции: Июнь 2012
Помог: 5 раз(а)
piratexnik пишет:
Понадобилось случайно. Капча отказывалась принимать примерно один из трех вводов.
Поэтому решил сравнить получаемое изображение со значением, чтоб узнать в чем причина.
В любом случае спасибо полезно было узнать.
ПС. по эксперементировав с кодом.
Хоть и знаю что session_start(); желательно до вывода чего либо,
Все равно переменная опаздывает. Хотя по идее должна открываться уже новая только, что сгенерированная сессия?
Если в таком, именно в таком контексте, без буферизации вы сможете запустить скрипт, ТОЧНО сработает)))
увы так запустить не получится
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.