За последние 24 часа нас посетили 54300 программистов и 1659 роботов. Сейчас ищут 1033 программиста ...

Не стартует сессия в capcha

Тема в разделе "PHP для новичков", создана пользователем zorinalexey59292, 2 окт 2016.

  1. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    Здравствуйте профессионалы. Сталкнулся с такой проблемой делаю каптчу для сайта и в ней не стартует сессия
    код скрипта

    PHP:
    1. <?php
    2.     session_start();
    3.     $tl=rand(5,10);
    4.     $light=$tl*35+10;
    5.     $height=50;
    6.     # Рисуем новое изображение
    7.    $im = @imagecreatetruecolor($light+20, $height+35);
    8.     $color = imagecolorallocate($im, rand(0,126), rand(0,126),rand(0,126));
    9.     imagefilledrectangle($im, 0, 0, $light+20, $height, $color);
    10.     # Mассив символов
    11.    $text_array=array("Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Z", "X", "C", "V", "B", "N", "M",);
    12.     #$text_array=array("Й","Ц","У","К","Е","Н","Г","Щ","З","Х","Ъ","Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э","Я","Ч","С","М","И","Т","Ь","Б","Ю");
    13.    #$text_array.=array(1,2,3,4,5,6,7,8,9,0);
    14.    $cap="";
    15.     # Задаем количество линий на фоне за текстом
    16.    $lines=rand(1,5);
    17.     # Рисуем линии на фоне за текстом
    18.    for($i=0;$i<$lines;$i++)
    19.     {
    20.         # Случайные координаты каждой линии
    21.        $x1=rand(0, $light/2);
    22.         $x2=rand($light/2, $light);
    23.         $y1=rand(0, $height/2);
    24.         $y2=rand($height/2, $height);
    25.         # Задаем случайный цвет каждой линии
    26.        $color=imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
    27.         # Прорисовываем каждую линию на случайных координатах
    28.        imageline ( $im, $x1, $y1, $x2, $y2, $color);
    29.     }
    30.     # Задаем количество точек на фоне за текстом
    31.    $pixel=rand($height, $light);
    32.     # Рисуем точки на фоне за текстом
    33.    for($i=0;$i<$pixel;$i++)
    34.     {
    35.         # Задаем случайный цвет каждой точке
    36.        $color_pixel=imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
    37.         # Прорисовываем каждую точку на случайных координатах
    38.        imagesetpixel($im, rand(0,$light), rand(0, $height), $color_pixel);
    39.     }
    40.     # Рисуем символы на изображении
    41.    for ($i=0;$i<$tl;$i++)
    42.     {
    43.         # Задаем случайный цвет каждму символу
    44.        $tc = imagecolorallocate($im, rand(150,255), rand(150,255), rand(150,255));
    45.         # Выбераем один случайный символ
    46.        $text=imap_utf8($text_array[array_rand($text_array, 1)]);
    47.         if ($i==0){$x=30;}    else {$x=$x+30+5;}
    48.         #
    49.        $size=rand(12,20);
    50.         #
    51.        $y=rand($size+10, $height-$size-10);
    52.         #
    53.        $dir="fonts/";
    54.         $tx=scandir($dir);
    55.         $count_font=count($tx);
    56.         $f=rand(2,$count_font-1);
    57.         $font=$dir.$tx[$f];
    58.         imagettftext($im, $size, rand(0,360), $x, $y, $tc, $font, $text);
    59.         $cap.=$text;
    60.     }
    61.     # Задаем количество линий на текстe
    62.    $lines=rand(1,5);
    63.     # Рисуем линии на текстe
    64.    for($i=0;$i<$lines;$i++)
    65.     {
    66.         # Случайные координаты каждой линии
    67.        $x1=rand(0, $light/2);
    68.         $x2=rand($light/2, $light);
    69.         $y1=rand(0, $height/2);
    70.         $y2=rand($height/2, $height);
    71.         # Задаем случайный цвет каждой линии
    72.        $color=imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
    73.         # Прорисовываем каждую линию на случайных координатах
    74.        imageline ( $im, $x1, $y1, $x2, $y2, $color);
    75.     }
    76.     # Задаем количество точек на текстe
    77.    $pixel=rand($height, $light);
    78.     # Рисуем точки на текстe
    79.    for($i=0;$i<$pixel;$i++)
    80.     {
    81.         # Задаем случайный цвет каждой точке
    82.        $color_pixel=imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
    83.         # Прорисовываем каждую точку на случайных координатах
    84.        imagesetpixel($im, rand(0,$light), rand(0, $height), $color_pixel);
    85.     }
    86.     $c1=$light/2-($light/100*20);
    87.     imagettftext($im, 10, 0, $c1, $height+10, imagecolorallocate($im, 255, 255, 255), "fonts/9988.otf", "Использовать только");
    88.     imagettftext($im, 10, 0, $c1-25, $height+20, imagecolorallocate($im, 255, 255, 255), "fonts/9988.otf", "заглавные английские буквы");
    89.     imagettftext($im, 10, 0, $c1, $height+30, imagecolorallocate($im, 255, 255, 255), "fonts/9988.otf", "читать с лева на право");
    90.     $_SESSION["cap"]=md5($cap);
    91.     # Отправляем заголовки
    92.    header("Content-Type: image/png");
    93.     # Выводим изображение на экран
    94.    imagepng($im);
    95.     imagedestroy($im);
    96. ?>
    Вызываю данный скрипт следующим образом
    HTML:
    1. <img src=\"core/components/anti_bot/them/anti_bot.php\" id=\"img\" border=\"0\" alt=\"\"/>
    2. <input type=\"button\"onclick=\"document.getElementById('img').src='core/components/anti_bot/them/anti_bot.php?id='+Math.round(Math.random()*9999)\" value=\"обновить\"><br />
    но при проверке данных выдает следующую ощибку

    Notice: Undefined index: cap in ...какой-то фаил

    в чем проблема??? подскажите пожалуйсто уже неделю бьюсь ни чего не выходит
     
    #1 zorinalexey59292, 2 окт 2016
    Последнее редактирование модератором: 2 окт 2016
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Вот в чём проблема, но нету подробностей, нужен весь текст ошибки. То что есть говорит о отсутствии ключа cap в массиве
     
  3. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    Это и я понял. вопрос в том что сессия как я понял в данном скрипте не стартует и данные в переменную сессии с ключем cap не вносятся. ПОЧЕМУ??? Все же верно скрипт рабочий ошибок нет и не выдает
     
    #3 zorinalexey59292, 2 окт 2016
    Последнее редактирование: 2 окт 2016
  4. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    И как ты это понял?
     
  5. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    не создается переменная сессии с ключем cap
     
  6. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @zorinalexey59292 кинь весь текст ошибки.
    --- Добавлено ---
    а ты при вызове этой сессии в другом месте. Пишешь session_start() ???
    --- Добавлено ---
    @zorinalexey59292 ошибка то вызвана явно не в этом скрипте. Хотя тут в массиве есть одна лишняя запятая.
    --- Добавлено ---
    $text_array - в этом
     
  7. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    Да ssession_start(); в другом скрипте тоже пишу но при сравнении $_POST['cap'] и $_SESSION['cap'] он пропадает кудато и выдает данную ошибку
    При том если не передовать header("Content-Type: image/png") то ключь массива сар не пропадает
     
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
  9. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
  10. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
  11. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    Пробывал уже так. И SID передавал. Уже по моему все что можно перепробывал. Может PHP глючный??? у меня 7 версия на лине
     
  12. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @zorinalexey59292 нет не глючный просто ты что - то не так делаешь.
    --- Добавлено ---
    @zorinalexey59292 Попробуй сессию после хедера.
     
  13. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    попробывал ни чего не изменилось
     
  14. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    PHP:
    1. header("Content-Type: image/png");
    2. $_SESSION["cap"]=md5($cap);
    Вот так пробовал?
     
  15. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    Да именно так и пробывал у меня почему-то не передается $_SESSION["cap"] она существует только в фаиле которая создает картинку , а при вызове этого фаила за пределы его не проходит как-будто это локальная переменная и доступна только в этом фаиле примерно так же как локальная переменная в функциях
     
  16. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @zorinalexey59292 а я бы вот попробовал использовать константу sid. Всё равно ты отправляешь заголовок. А сессия у тебя так до браузера и не дошла. Вот она и пустая.
    А ты не можешь в том документе где ты принимаешь эту сессию использовать хедер контент/тайп?
     
  17. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    Как использовать эту константу?
    там идет простое сравнение переменных примерно так
    PHP:
    1. if ($_SESSION["cap"]==$_post['cap'])
    2. {
    3.      echo "верно";
    4. }
    и хедер контент/тайп там не нужен впринципи
    --- Добавлено ---
    и как довести сессию до браузера???
     
  18. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @zorinalexey59292
    Почитай что такое хедер.
    Что такое сессия.
     
  19. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    Прочитал но так и не понял как довести сессию до браузера
    подскажите кто знает а лутше пример кода
     
  20. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @zorinalexey59292 жесть какая то при формировании документа. Сервер отдаст браузеру. id сессии в куку. А хедер отправляется до формирования документа.
     
  21. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    id сессии во всех скриптах одна и та же она передается нормально а вот $_SESSION['cap'] ни как не хочет передаваться из этого скрипта я сам не могу понять почему так
    сравнивал var_damp($_SESSION); во всех скриптах своего сайта и только в одном фаиле появляется $_SESSION['cap'] но дальше его не уходит . Складывается такое впечатление что эту переменную где-то , что-то убивает. А что понять не могу.
     
  22. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @zorinalexey59292 ааа... Я же пишу хедер чувак, хедер!!!!!
     
  23. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    То есть если передавать эту переменную после хедера то должно работать ? Я так делал ни чего не работает.
     
  24. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Нахрена тебе вообще там хедер? с content/type . Ты не можешь его в формируемом документе засунуть свой контент тайп в html ?

    HTML:
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    2.  "http://www.w3.org/TR/html4/strict.dtd">
    3.   <head>
    4.    <meta http-equiv="Content-Type" content="image/png; charset=utf-8">
    5.    <title>картинка</title>
    6.   </head>
    7.   <body>
    8.   </body>
    9. </html>
    --- Добавлено ---
    Либо же в формируемом документе и отправить header заголовок на php

    А вообще я чувствую себя вангой. Я устал уже тут гадать почему не работает ты либо кинешь наконец весь свой код. Либо я спать.
     
  25. zorinalexey59292

    zorinalexey59292 Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    22
    Симпатии:
    1
    Без этого отображается только бит код изображения а если его вызывать как изображение то отображается не изображение а замещающая картинка как в случае не загруженного изображения.
    Без хедера там ни как не обойтись
    --- Добавлено ---
    Я весь код скинул