За последние 24 часа нас посетили 34882 программиста и 1693 робота. Сейчас ищут 654 программиста ...

Механизм сессий

Тема в разделе "PHP для новичков", создана пользователем tommyangelo, 30 дек 2009.

  1. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Добрый вечер. Написал админку для сайта, используя механизм авторизации описанный в книгах Д.Колесниченко (может кто сталкивался).

    Есть меню с таким кодом

    Код (Text):
    1. if  (!isset($_POST['submit'])) {//выводим форму входа;}
    2.         else {
    3.             $login = $_POST['login'];
    4.             fast_connect_to_bd(); //моя функция
    5.             $query = "SELECT * FROM admin_users WHERE username = '".$login."'";
    6.             $r = mysql_query($query) or die('error');
    7.             $f = mysql_fetch_assoc($r);
    8.             $password = $_POST['password'];
    9.                 if (coder($password)===$f[userpass])  //coder - моя функция
    10.                     {
    11.                     mt_srand(time() + (double)microtime()*55);
    12.                     $N = mt_rand(0, 999);
    13.                     $sname = "MySession$N";
    14.                     session_name($sname);
    15.                     session_start();
    16.                     session_register("auth","username","pass");
    17.                     $auth = 1;
    18.                     $username = $login;
    19.                     $pass = coder($password);
    20.  
    21. //выводим меню со ссылками вида a href="edit_text.php?sname=$sname
    22.  
    23.                     unset ($_POST['submit']);
    24.                     }
    25.                 else {//сообщение об ошибке}
    26.         }
    По ссылке открывается сценарий авторизации

    Код (Text):
    1.  
    2. if (!isset($_GET['sname']))) die ('Сначала пройдите авторизацию!');
    3.  
    4.  
    5. //подключение к сессии
    6. session_name($sname);
    7. session_start();
    8.  
    9. //проверка переменных сессии
    10. if ($auth !=1) die ('Ошибка аутентификации');
    11. fast_connect_to_bd() or die ('Ошибка доступа к Базе данных');          //моя функция
    12. $r = select_line_from_db ("*","admin_users","username",$username); //моя функция
    13. if ($r[userpass] === $pass)
    14.    
    15. {// текст скрипта
    Это всё дело превосходно работало на домашнем компе и на хостинге. Сегодня перенес на другой хостинг, и появилась ошибка

    И не работает....пишет всё время 'Ошибка аутентификации'.
    Получается, не передаются переменные сессии... В чем же дело??

    PHP Version 5.2.11
    register_globals off
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    совпадает с именем одной из существующих переменных.
     
  3. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    проверил, не совпадает...
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Черт, ну как же не совпадает.
     
  5. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    $r[userpass] - элемент массива, из базы данных

    $pass - переменная сессии.

    Извини, но я немного не понимаю, что именно ты имеешь ввиду...$pass - в первом файле регистрируется как переменная сессии. А if ($r[userpass] === $pass) - проверка во втором файле
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    поэтому это
    неверно.

    переменная сессии у тебя в $_SESSION['pass']
    но ругается именно на наличие $pass (почему - это отдельный разговор или можешь почитать описание session.bug_compat_42 )
     
  7. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    т.е. если я правильно понял - мне и надо тут сделать
    Код (Text):
    1. session_register("auth","username","pass");
    2.                $_SESSION['auth'] = 1;
    3.                $_SESSION['username'] = $login;
    4.                $_SESSION['pass'] = coder($password);
    и при проверке использовать массив $_SESSION

    ???
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    session_register не использовать. Поскольку эта функция deprecated.

    Если хочешь что-то сохранить или достать из сессии обращайся к $_SESSION
    точно так же как к $_POST/$_GET
     
  9. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Не используйте session_register
     
  10. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    большое спасибо, разобрался.