За последние 24 часа нас посетили 35237 программистов и 1742 робота. Сейчас ищут 1023 программиста ...

Сессии

Тема в разделе "PHP для новичков", создана пользователем produser, 28 янв 2012.

  1. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Здравствуйте. Сделал авторизацию на сайте, после того как пользователь залогинился, хотелось бы, что бы в форме выводилось то то типа - "Добро пожаловать %username%".

    После успешной автоизации идет следующий код:
    Код (Text):
    1.  
    2. $_SESSION["UserInfo"] = array('login'=>$row->name,'email'=>$row->mail);
    3. setcookie("user",$mdname."_".$mdpw,time()+60*60*24*10,"/");
    Как мне получить из переменой $_SESSION имя пользователя?

    Зараннее спасибо за ответы.
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    $_SESSION["UserInfo"]['name']
     
  3. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    echo('Username='.$_SESSION["UserInfo"]['name']);
    говорит что: Undefined variable: _SESSION in
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Бр... name тут причем (Вам пример показали), у вас там login и email - $_SESSION["UserInfo"]['login']
     
  5. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    echo('USERNAME='.$_SESSION["UserInfo"]['login']);

    Notice: Undefined variable: _SESSION in

    то же самое(

    Добавлено спустя 30 минут 28 секунд:
    В php.ini директива register_globals была off сделал on ничего не изменилось, только вылез нотис при запуске xammp
    Warning: Directive 'register_globals' is deprecated in PHP 5.3 and greater in Unknown on line 0
    Я так понимаю, что что эта директива была выпиленна из php 5.3( Есть ли альтернативный вариант решения этой проблемы?
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    верни назад директиву

    сессию надо session_start(); для начала
     
  7. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Вернул назад, вставил после авторизации session_start();
    получилось так:
    Код (Text):
    1.  
    2.                                $mdname = md5($login);
    3.                 $mdpw = md5($pass);
    4.                 $_SESSION["UserInfo"] = array('login'=>$row->name,'email'=>$row->mail);
    5.                 setcookie("user",$mdname."_".$mdpw,time()+60*60*24*10,"/");                            
    6.                                 session_start();
    та же картина... Может я туплю, но я только начал изучать пхп , поэтому просьба: обьясняйте как полному новичку) Что, куда, перед чем...

    Зараннее благодарен.
     
  8. jenya777777

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

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    session_start(); надо вставлять в самое начало страницы, перед всем кодом
     
  9. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Вставил в самый верх index.php результат такой же(
    Или все таки эту конструкцию надо вставить в начало файла login.php? где собсвенно и происходит авторизация...
     
  10. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    index.php где то внутри себя "инклюдит" login.php?

    если да, то вставь в индекс....
     
  11. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Все правильно, index.php инклудит login.php, но почему-то, когда я вставил session_start(); в начало index.php ничего не изменилось. все та же ошибка он еобьявленной переменной(
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    напиши var_dump( $_SESSION );
     
  13. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ща он те вывалит за 3 дня гуляния по пороносайтам ))))) 5 страниц листать будешь )))
     
  14. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Можно попробовать сделать так
    var_dump(session_start());

    Если вернет FALSE значит как-то блокируется создание сессии, если TRUE значит все ОК

    А если вставить session_start(); в скрипт login.php то же возвращается ошибка?
     
  15. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    на var_dump( $_SESSION ); и var_dump(session_start()); выдает
    array(0) { }
    Notice: A session had already been started - ignoring session_start() in /opt/lampp/htdocs/test/index.php on line 114
    bool(true)
    Notice: Undefined index: UserInfo in /opt/lampp/htdocs/test/index.php on line 119

    если же убираю session_start из самого начала index.php то :

    Notice: Undefined variable: _SESSION in /opt/lampp/htdocs/test/index.php on line 113
    NULL bool(true)
    Notice: Undefined index: UserInfo in /opt/lampp/htdocs/test/index.php on line 119
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Этого не может быть =) там ничего такого не живет. Сессия это такой текстовый файлик на стороне сервера.

    Добавлено спустя 6 минут 36 секунд:
    ну дык вроде все пашет. сессия создается. она пустая. второй раз уже быть объявлена не может, так что все пашет.

    а если у тебя сессия пустая, то может это потому что туда ничего не записано? =)
     
  17. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ага, точно, со своим попутал )))
     
  18. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Ну после авторизации ж туда чето пишется... может просто я не там делаю session_start ? после чего нужно это делать? Сразу после авторизации или где?

    Тем более что я ж туда пишу:
    Код (Text):
    1.  
    2. $_SESSION["UserInfo"] = array('login'=>$row->name,'email'=>$row->mail);
    3. setcookie("user",$mdname."_".$mdpw,time()+60*60*24*10,"/");
    правда только когда логинится пользователь... Но я пробывал и логинится - вес бестолку(
     
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    session_start нужно делать не ПОСЛЕ, а ДО чего-то. Её нужно вызывать ДО всего :)))
     
  20. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
  21. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    что то я не пойму механизма работы, читал вроде все понятно, а на деле во как)
    Если, например, сделать старт сесии в самом начале, то она будет пустая , т.к. я в нее еще ничего не писал...Но с другой стороны, после логина, даже если закрыть браузер, перелогиневатся не нада, все хватает и так...
     
  22. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Писать в сессию до того, как ты её стартуешь - вообще бессмысленно. Ничего не запишется. Сперва стартуешь сессию, потом уже пишешь туда или читаешь оттуда или обновляешь и т.п. Только после того, как стартовал её.
     
  23. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Я так понял с сессией у меня все нормально, вот только не пойму, почему пхп не видит $_SESSION и ругается на нее Undefined variable: _SESSION
    Думаю что проблема именно в этом.
     
  24. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    как вариант, имя переменной, которой ты пытаешься достать из сессеии в ней нет, тебе ж писали:
     
  25. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    всем спасибо, поулчилось! только когда я строку
    Код (Text):
    1. $_SESSION["UserInfo"] = array('login'=>$row->name,'email'=>$row->mail);
    заменил на
    Код (Text):
    1.  
    2. $tmp=$row->name;
    3. $_SESSION["UserInfo"] = array('login'=>$tmp,'email'=>$row->mail);
    Незнаю почему так, но работает!