За последние 24 часа нас посетили 16103 программиста и 1545 роботов. Сейчас ищут 935 программистов ...

Сохранение случайных ключей в сессии.

Тема в разделе "Прочие вопросы по PHP", создана пользователем vladprokopchuk, 21 окт 2014.

  1. vladprokopchuk

    vladprokopchuk Новичок

    С нами с:
    21 окт 2014
    Сообщения:
    3
    Симпатии:
    0
    Добрый день.
    Столкнулся с проблемой:
    Создаю ключ, сохраняю его в сессии, он передается get - ом на другую страницу через созданную в ниже в приемре ссылку, там сверяется ключ из сессии с тем что в массиве GET.

    $code = md5('fhj34985jnjfnjvnj5867');
    session_start();
    $_SESSION['code'] = $code;

    echo "<a href='money.php?code=".$_SESSION['code']."'>Проверить</a>";

    ______________________________________________________________
    принимающий скрипт(money.php).

    session_start();

    $val = ($_SESSION['code']==$_GET['code']);

    var_dump($val);
    echo '<pre>';
    print_r($_SESSION['code']);
    echo '<br>';
    print_r($_GET['code']);

    все ок, имеем в браузере следуещее:

    boolean true

    1c6c2ed4edb1e4fe0fb60e5f6b28106f
    1c6c2ed4edb1e4fe0fb60e5f6b28106f


    НО! мне нужен случайный ключ, я меняю генерацию ключа, добавляю к хэшируемой строке rand(1, 25000)
    и все ломается.

    $code = md5(rand(1, 25000).'fhj34985jnjfnjvnj5867');
    session_start();
    $_SESSION['code'] = $code;

    echo "<a href='money.php?code=".$_SESSION['code']."'>Проверить</a>";

    ________________________________________________________________
    теперь имеем в браузере:

    boolean false

    04e559ae3ecee15b066bb1fe8fde124d
    6d8a4ef0792e78cd5157b0ba83402ccc

    Помогите разобраться, почему при сохранению в сессию ключ меняется?
    Пробовал различные генераторы не помогает, как только добавлю к ключу рандомно генерируемое значение вылезает проблема. Пробовал сохранить вместо сессий в базу или куки тоже самое....
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    видимо успеваешь где-то еще раз его сменить.
    Код (PHP):
    1.  
    2. if (empty($_SESSION['code'])) {
    3.   $code = md5(rand(1, 25000).'fhj34985jnjfnjvnj5867');
    4.   $_SESSION['code'] = $code;
    5. } else {
    6.   $code = $_SESSION['code'];
    7. }
    8.  
     
  3. vladprokopchuk

    vladprokopchuk Новичок

    С нами с:
    21 окт 2014
    Сообщения:
    3
    Симпатии:
    0
    в том то и дело что не меняю, я описал проблему в топике максимально упрощая, кроме того что написанно в скриптах больше ничего нет. Сначала столкнулся в среде фреймворка, потом все упростил и смоделировал тоже самое максимально просто в двух пхп файлах на пустом домене.....
    А кроме того с хэшом то работает.
    Только если добавить в него рандом вылазеет бок.
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    что скажешь насчет кода, который я тебе предложил?
     
  5. vladprokopchuk

    vladprokopchuk Новичок

    С нами с:
    21 окт 2014
    Сообщения:
    3
    Симпатии:
    0
    if (empty($_SESSION['code'])) {
    $code = md5(rand(1, 25000).'fhj34985jnjfnjvnj5867');
    $_SESSION['code'] = $code;
    }

    действительно помогло, спасибо.

    Добавлено спустя 1 минуту:
    только не пойму почему менялось содержимое сессии....в скрипте не было кода с повторной записью...
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    полкода это не весь код, не используй его по половинке, как ты написал. используй, как я написал.
     
  7. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Чудес не бывает, ищите редирект, лишни инклюд или типа того. На чистом index.php => money.php без хтабсцессов процитированный код будет работать 100пудово.