|
|
|
| Добрый день! Помогите, пожалуйста, разобраться с проблемой с сессиями.
Есть скрипт, каптча, при обращении к которому устанавливается случайное значение переменной (имя переменной которой указывается в параметре) в сессии и возвращается картинка с этим значением (кодом).
Ссылка такого вида: /captcha/captcha.php?namevar=value
Вот код каптчи:
<?php
session_start();
$namevar = $_GET['namevar'];//получаем имя переменной
$code = rand(1000,9999);
$_SESSION[$namevar] = $code; //присваиваем этой переменной значение $code
//здесь генерируем и выводим изображение
?>
|
Никаких проблем не было, до поры до времени. Когда же я захотел создать на странице две капчи с именами "code" и "orderCode", то получилось не пойми что.
Переменная $_SESSION['code'] существует, но имеет значение $_SESSION['orderCode']. Т.е. вместо разных значений, эти разные переменные имеют одно, но так не всегда, а примерно в 90% случаях.
Стоит отметиь, что на локальном сервере нет никаких проблем, а возникают они только на хостинге.
Я пробовал изменить имена переменных на 'v' и 'z' и в таком случае нет никаких проблем. Кто нибудь может мне объяснить столь странное поведение сессий? Или может я что-то не так сделал? | |
|
|
|
|
|
|
|
для: x89
(26.07.2012 в 22:25)
| | тут мало кто занимается "лечением по фотографии"
нужен реальный код в котором содержится "ошибка" | |
|
|
|
|
|
|
|
для: Valick
(26.07.2012 в 22:57)
| | Так я привел реальный код каптчи. Вот он полный:
<?php
session_start();
$namevar = $_GET['namevar'];
$code = rand(1000,9999);
$_SESSION[$namevar] = $code;
$img = imagecreatefromjpeg("captcha.JPG");
$font = "Frscript.TTF";
$color = imagecolorallocate($img,0,0,0);
imagettftext($img,20,0,12,24,$color,$font,$code);
header('Cache-control: no-cache');
header('Content-type: image/jpeg');
echo imagejpeg($img);
?>
|
Код HTML:
<?php session_start(); ?>
<html>
<head>
<title>Er</title>
</head>
<body>
<?php
echo 'code : '.$_SESSION['code']."<br>";
echo 'orderCode : '.$_SESSION['orderCode'];
?>
<br><br>
Переменная 'code' - <img src='/admin/test/captcha/captcha.php?namevar=code'><br><br>
Переменная 'orderCode' - <img src='/admin/test/captcha/captcha.php?namevar=orderCode'>
</body>
</html>
|
Выводит практически всегда:
-----------
code: 5656//или любой другой код, сгенерированный
orderCode: 5656//выводит тоже самое, хотя переменная другая
Переменная 'code' - новая картинка
Переменная 'orderCode' - новая картинка
----------
P.S. причем на самих картинках значения разные | |
|
|
|
|
|
|
|
для: x89
(26.07.2012 в 23:03)
| | captcha.JPG прикрепите в архиве сюда | |
|
|
|
|
 39.9 Кб |
|
|
для: Valick
(26.07.2012 в 23:25)
| | Прикрепил все | |
|
|
|
|
|
|
|
для: x89
(26.07.2012 в 23:31)
| | на сервере версия PHP меньше 4.2.0? | |
|
|
|
|
|
|
|
для: Valick
(26.07.2012 в 23:48)
| | Версия PHP 5.2.12 | |
|
|
|
|
|
|
|
для: x89
(26.07.2012 в 23:51)
| | тогда не знаю
все равно попробуйте вместо rand использовать mt_rand
и явно переинициализируйте генератор
// инициализация текущими микросекундами
function make_seed()
{
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$code = mt_rand(1000,9999);
|
| |
|
|
|
|
|
|
|
для: Valick
(26.07.2012 в 23:59)
| | К сожалению ничего не изменилось. | |
|
|
|
|
|
|
|
для: x89
(27.07.2012 в 00:14)
| | нужно еще проследить кто к кому попадает code в orderCode или наоборот | |
|
|
|
|
|
|
|
для: Valick
(27.07.2012 в 07:17)
| | В переменную code попадает значение orderCode. Это не сложно проверить, подставив в значение переменной имя переданное параметром. Хотя, как Вы можете это проверить...
Проверил скрипт на другом хостинге, всё отлично работает, как и на локалке. Написал в техподдержку, пусть разбираются.. | |
|
|
|
|
|
|
|
для: x89
(26.07.2012 в 23:03)
| | Вы никогда не увидите равные значения в строках и на изображениях, поскольку строки будут отображать значения при выводе страницы, а изображения после ее вывода, то есть уже иные. Строки будут показывать значения ранее отображенные изображениями, а при первичном запуске кода, ошибки.
А вот о равенстве значений в строках, такого быть не может. | |
|
|
|
|
|
|
|
для: confirm
(27.07.2012 в 07:05)
| | >>Вы никогда не увидите равные значения в строках и на изображениях, поскольку строки будут отображать значения при выводе страницы, а изображения после ее вывода, то есть уже иные. Строки будут показывать значения ранее отображенные изображениями, а при первичном запуске кода, ошибки.
Да, спасибо, я прекрасно это понимаю.
>>А вот о равенстве значений в строках, такого быть не может.<
Мне тоже так казалось, пока не встретил ЭТО! | |
|
|
|
|
 1.6 Кб |
|
|
для: x89
(27.07.2012 в 13:22)
| | Если у вас механизм сессии работает, если запросы обрабатываются, то никаких "пока не встретил ЭТО" не будет. Проверьте свой сервер. | |
|
|
|