Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с сессиями
 
 автор: x89   (26.07.2012 в 22:25)   письмо автору
 
 

Добрый день! Помогите, пожалуйста, разобраться с проблемой с сессиями.
Есть скрипт, каптча, при обращении к которому устанавливается случайное значение переменной (имя переменной которой указывается в параметре) в сессии и возвращается картинка с этим значением (кодом).

Ссылка такого вида: /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' и в таком случае нет никаких проблем. Кто нибудь может мне объяснить столь странное поведение сессий? Или может я что-то не так сделал?

  Ответить  
 
 автор: Valick   (26.07.2012 в 22:57)   письмо автору
 
   для: x89   (26.07.2012 в 22:25)
 

тут мало кто занимается "лечением по фотографии"
нужен реальный код в котором содержится "ошибка"

  Ответить  
 
 автор: x89   (26.07.2012 в 23:03)   письмо автору
 
   для: 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. причем на самих картинках значения разные

  Ответить  
 
 автор: Valick   (26.07.2012 в 23:25)   письмо автору
 
   для: x89   (26.07.2012 в 23:03)
 

captcha.JPG прикрепите в архиве сюда

  Ответить  
 
 автор: x89   (26.07.2012 в 23:31)   письмо автору
39.9 Кб
 
   для: Valick   (26.07.2012 в 23:25)
 

Прикрепил все

  Ответить  
 
 автор: Valick   (26.07.2012 в 23:48)   письмо автору
 
   для: x89   (26.07.2012 в 23:31)
 

на сервере версия PHP меньше 4.2.0?

  Ответить  
 
 автор: x89   (26.07.2012 в 23:51)   письмо автору
 
   для: Valick   (26.07.2012 в 23:48)
 

Версия PHP 5.2.12

  Ответить  
 
 автор: Valick   (26.07.2012 в 23:59)   письмо автору
 
   для: 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);

  Ответить  
 
 автор: x89   (27.07.2012 в 00:14)   письмо автору
 
   для: Valick   (26.07.2012 в 23:59)
 

К сожалению ничего не изменилось.

  Ответить  
 
 автор: Valick   (27.07.2012 в 07:17)   письмо автору
 
   для: x89   (27.07.2012 в 00:14)
 

нужно еще проследить кто к кому попадает code в orderCode или наоборот

  Ответить  
 
 автор: x89   (27.07.2012 в 13:20)   письмо автору
 
   для: Valick   (27.07.2012 в 07:17)
 

В переменную code попадает значение orderCode. Это не сложно проверить, подставив в значение переменной имя переданное параметром. Хотя, как Вы можете это проверить...
Проверил скрипт на другом хостинге, всё отлично работает, как и на локалке. Написал в техподдержку, пусть разбираются..

  Ответить  
 
 автор: confirm   (27.07.2012 в 07:05)   письмо автору
 
   для: x89   (26.07.2012 в 23:03)
 

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

  Ответить  
 
 автор: x89   (27.07.2012 в 13:22)   письмо автору
 
   для: confirm   (27.07.2012 в 07:05)
 

>>Вы никогда не увидите равные значения в строках и на изображениях, поскольку строки будут отображать значения при выводе страницы, а изображения после ее вывода, то есть уже иные. Строки будут показывать значения ранее отображенные изображениями, а при первичном запуске кода, ошибки.

Да, спасибо, я прекрасно это понимаю.

>>А вот о равенстве значений в строках, такого быть не может.<

Мне тоже так казалось, пока не встретил ЭТО!

  Ответить  
 
 автор: confirm   (27.07.2012 в 13:34)   письмо автору
1.6 Кб
 
   для: x89   (27.07.2012 в 13:22)
 

Если у вас механизм сессии работает, если запросы обрабатываются, то никаких "пока не встретил ЭТО" не будет. Проверьте свой сервер.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования