|
|
|
| Почему с 1-го раза capcha.php не отображает в форме цифры на картинке, только если открываю форму во второй раз. Я же запускаю сессии и там и там, почему тогда в 1-й раз переменная $_SESSION['capcha'] не отображается на картинке - только со второго раза?
<?
echo "Введите ваши данные!";
session_start();
$_SESSION['capcha'] = mt_rand(100000,999999);
echo '<form name="addNewUser" action="newuser.php " method="POST" enctype="multipart/form-data">';
echo '<table border="0" cellpadding="0" cellspacing="0">';
echo' <TR>
<TD WIDTH="40%" height="30" ALIGN="Left" class="input" >Контрольный код<br><img src="capcha/capcha.php"></TD>
<TD WIDTH="60%" height="30" ALIGN="Left"><INPUT TYPE="TEXT" NAME="capcha" SIZE="60" MAXLENGTH="100"></TD>
</TR>';
echo '<tr>';
echo '<td colspan="2"><input type="submit" name="submitForm" value="Зарегистрировать" class="bt1"/>';
echo '</tr>';
echo '</table>';
echo '<form>';
?>
|
capcha.php:
<?php
//Запускаем сессию
session_start();
//Создаем изображение
$im=imagecreatefromjpeg("capcha.jpg");
//Генерируем цвет надписи
$color=imagecolorallocate($im,0,0,0);
//Формируем надпись, используя шрифт
imagettftext($im, 24, 0, 3, 30, $color, "/public_html/capcha/corona.ttf", $_SESSION['capcha']);
//Указываем тип содержимого
header("Content-type: image/jpeg");
//Создаем и выводим изображение
imagejpeg($im);
//Разрушаем изображение
imagedestroy($im);
?>
|
| |
|
|
|
|
|
|
|
для: Port_Artur
(01.04.2010 в 18:41)
| | Я вам уже говорил, что формированием числа для каптчи и помещением его в сессию должен заниматься скрипт готовящий каптчу! А вы опять что творите? | |
|
|
|
|
|
|
|
для: sim5
(01.04.2010 в 18:48)
| | Точно вспомнил. Спасибо что ещё раз напомнили.
Но всё же , переменную я же занёс в сессию, почему в capcha.php её вроде как не видно? для особо одарённых объясните пожалуйста, а то я что-то никак не пойму. | |
|
|
|
|
|
|
|
для: Port_Artur
(01.04.2010 в 18:58)
| | Для одаренных: enctype="multipart/form-data" - это для чего? Или форма для загрузки?
set.php - запустить
<?
session_start();
$_SESSION['as'] = 13;
?>
<img src="get.php" />
|
get.php - результат
<?
session_start();
$im = imagecreate(80,30);
$back = imagecolorallocate($im, 0, 0, 0);
$col = imagecolorallocate($im, 255, 255, 255);
imagestring ($im, 5, 20, 5, $_SESSION['as'], $col);
header ("Content-type: image/jpeg");
imagejpeg($im);
?>
|
Проблем нет. | |
|
|
|
|
|
|
|
для: sim5
(01.04.2010 в 19:28)
| |
....
header( 'Location: login.php' );
die();}
....
|
В этом случае переменная сесcии должна передаваться в login.php или нет?
У меня почему-то не передаётся! Почему. Запускаю сессию везде.
Где вообще можно нормально почитать когда можно передать переменную через сессию, а когда нельзя? | |
|
|
|
|
|
|
|
для: Port_Artur
(01.04.2010 в 23:19)
| | Сессия (ее переменные) ни куда не передается. Сессия, это файл на диске, и если в login.php сессия стартуется, то доступ к ней будет.
Нельзя передать ничего через сессию только в том случае, если механизм сессии отключен, в остальном ни чем не возобраняется. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 03:50)
| | На странице http://www.softtime.ru/bookphp/gl8_1.php
пропущено слово "можно":
Т. о. необходим метод, при помощи которого можно было бы отслеживать информацию о пользователе в течение одного сеанса связи с Web-сайтов. | |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 08:42)
| | Что вы подразумеваете под "методом"? | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 09:13)
| | в этом предложении
Т. о. необходим метод, при помощи которого можно было бы отслеживать информацию о пользователе в течение одного сеанса связи с Web-сайтов.
|
на указанной странице http://www.softtime.ru/bookphp/gl8_1.php пропущено слово можно
Это ваш сайт и у вас там типа ошибка | |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 10:52)
| | Кстати на этой же страничке второй абзац сверху вторая строка:
необходимо сохранять информацию о пользователях на протяжении нескольких станиц - очепятка
|
| |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 10:52)
| | Это не мой сайт, вы заблуждаетесь. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 11:12)
| | Давайте вернёмся к моему первому сообщению в данной теме.
Вы писали что созданная переменная хранится в файле на сервере и я могу к ней потом обращаться.
Вот мы создаём переменную $_Session[capcha]. Отображаемая картинка формируется файлом capcha.php, который выполняется на том же самом сервере, а значит у этого файла также есть доступ к переменным сессии, я же стартую session_start(); в capcha.php, или всё же нет. Я вот этот момент никак не могу уяснить. Ну да картинка отображается в Форме. Ну и что из этого. картинка то ведь формируется скриптом на сервере а не на стороне клиента. Если доступ есть, то почему нам обязательно нужно создавать число для капчи именно в capcha.php.
и ENCTYPE - это же для отправления данных через форму. А мы картинку получаем.
Вы извините что я тут много расписал просто понять не могу. Может кто объяснит? | |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 11:38)
| | Ну спасибо за снисходительность.
Во-первых - не $_Session[capcha], а $_SESSION['capcha'].
Во-вторых - доступ к переменным сессии будут иметь все файлы одного владельца инициализирующие сессию.
В третих - если вы нацарапаете на своей капче так, что пользователь не поймет и попросить ее обновить, тогда что, кто в этом случае будет формировать код?
В четвертых - ENCTYPE не для отправления данных через форму, а для указания типа данных. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 12:02)
| | А при использовании include переменные передаются, а то у меня отказывается передаваться переменная.
<?php include 'left.php'; ?>
|
| |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 13:00)
| | Какие переменные и откуда? | |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 13:00)
| | Почему-то пременная $_SESSION['cap'] из log.php не передаётся в файл login.php
log.php
<?
session_start();
$_SESSION['cap'] = mt_rand(100000,999999);
header( 'Location: login.php' );
die();
}
|
login.php
<?
session_start();
$ses=$_SESSION['cap'];
...
echo '<tr>';
echo '<td align="left"><strong>Домашняя страничка:</strong></td>';
echo '<td align="left"><input type="text" name="url" maxlength="60" value="'.$ses.'" class="in1"/></td>';
....
|
| |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 13:06)
| | Вам сколько раз повторять - сессия, и ее переменные, никуда не передаютя. Это физически не возможно, сессия это файл на винчестере, обычно по умолчанию в папке temp, а все переменные в ней хранятся в сериализованном виде. Как записывать в сессию, как получать из нее вам уже говорилось, что еще не понятного?
Вы вообще представляете для чего нужна каптча? | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 13:14)
| | Хорошо, если я создаю переменную в файле log.php, почему я не могу её потом извлечь из сесии в файле login.php.
Капча мне нужна для защиты от спамерских программ (типа хрумера). | |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 13:19)
| | А у вас сам механизм сесси включен?
Еще раз - у вас пользователь запросил форму авторизации обратившись к некой странице. На этой странице вы только стартуете сессию, и отдаете форму, в которой помещено изображение каптчи, которое в свою очередь делает запрос к скрипту формирующему каптчу. И уже этот скрипт генерирует код каптчи для изображения, и для записи его в сессию.
Страница проверки формы обрабатывает форму, сверяет введенный пользователем код, с кодом занесенным в сессию скриптом формирующем каптчу.
Если все ОК, то далее устанавливается признак успешного принятия формы, а не гоняется этот код от скрипта к скрипту в открытом виде, как это вы делаете.
Можно одним скриптом отдавать форму пользователю, производить ее проверку, и формировать каптчу, но в этом случае срипт должен быть разбит на логические блоки, которые будут обрабатываться по параметрам запроса к нему. То что вы пишите, это полный абсурд, и как вам еще это объяснить я не знаю. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 13:31)
| | Да конечно я не гоняю капчу в открытом виде. Я просто взял куски кода для примера. Я передаю из обработчика сообщение об ошибке и значения полей, если какие-то поля заполнены не правильно. После того как обработчик перебрасывает пользователе обратно на форму регистрации формируется новая капча и записывается в сессию для проверки в обработчике со значением, которое пользователь вводит с картинки.
У меня не получается передать переменную из одного файла .php в другой .php.
И что значит "А у вас сам механизм сесси включен?"
Разве это session_start(); не включает механизм сессии? | |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 13:48)
| | Я в который раз вижу у вас подобную чушь:
log.php<?
session_start();
$_SESSION['cap'] = mt_rand(100000,999999);
.....
поэтому и пишу, что у вас полный бардак, и коли вы это понимаете, пора бы уже и человеческий код приводить, а тем более не писать о передаче кода каптчи через форму другому скрипту.
session_start() - не включает сессю (она разрешается в php.ini, и все ее параметры устанавливаются там же), а стартует сессию, или продлевает существующую.
Если у вас не удается получить значение из сессии, то она либо ввобще не работает у вас, либо прерывается, либо, например, истекло время ее жизни, по умолчанию равное 24 мин. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 14:09)
| | session
Session Support enabled
Registered save handlers files user sqlite
Registered serializer handlers php php_binary
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 4 4
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /usr/home/domain/tmp/ /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid
|
| |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 14:16)
| | Разбирайтесь. Значит она у вас прерывается. Да и заглянуть в нее труда не стоит, вывести текущий id ее тоже, чтобы понять причины. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 14:22)
| | А как в неё заглянуть и в каком месте это лучше cделать? | |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 14:26)
| | А вы внимательно читаете то, что я вам пишу? А путь к сессии из того что вы представили узнать трудно? Открываейте хоть Блокнотом и смотрите. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 14:30)
| | В капче лежит переменная
которая записывается туда файлом создающим изображение капчи. В файле обработчике не удаётся записать туда переменную:
<?
session_start();
$_SESSION['cap'] = mt_rand(100000,999999);
...
|
В сессии по прежнему 1 переменная.
Почему так происходит? | |
|
|
|
|
|
|
|
для: Port_Artur
(02.04.2010 в 14:48)
| | В файле обработчике чего? Проверки каптчи? А зачем при проверке каптчи записывать в $_SESSION['cap'] что-то? Обработчик читать ее должен и сравнивать, а записывать значение в эту переменную должен ТОЛЬКО скрипт формирующий каптчу. | |
|
|
|