За последние 24 часа нас посетили 51995 программистов и 1763 робота. Сейчас ищут 2690 программистов ...

Сессия в php

Тема в разделе "PHP для новичков", создана пользователем dima_mak, 25 янв 2008.

  1. dima_mak

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

    С нами с:
    25 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Есть файл dblib.php:
    Код (Text):
    1.  
    2. <?php
    3. session_start();
    4. function cleanMemberSession($id,$login,$pass)
    5. {
    6.  session_unset();
    7.  session_register("login");
    8.  $_SESSION[login]=$login;
    9.  session_register("password");
    10.  $_SESSION[password]=$pass;
    11.  session_register("iid");
    12.  $_SESSION[iid]=$id;
    13.  session_register("logged_in");
    14.  $_SESSION[logged_in]=true;
    15. }
    16.  
    17. function checkUser()
    18. {
    19. $_SESSION['logged_in']=false;
    20. $club_row=getrow("users","id",$_SESSION['iid']);
    21. if(!(!$club_row || $club_row[nik] != $_SESSION['login'] || $club_row[password] != $_SESSION['password']))
    22.  //print $_SESSION[login]." - ".$_SESSION[password];
    23.  //header("Location: login.php?err=1");
    24.  $_SESSION['logged_in']=true;
    25. return $club_row;
    26. }
    и файл login.php:

    этот файл инклюдится в каждую страницу сайт.
    Код (Text):
    1.  
    2. <?php
    3. $err= $_REQUEST['err'];
    4. $login= $_REQUEST['login'];
    5. $password= $_REQUEST['password'];
    6. $actionflag= $_REQUEST['actionflag'];
    7. $logout= $_REQUEST['logout'];
    8. connectToDB();
    9. $message="";
    10. if ($logout)
    11.  session_unset();
    12. if ( isset($actionflag) && $actionflag=="login")
    13.  {
    14.  if(empty($login) ||
    15.     empty($password))
    16.   $message .="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Заполните все поля!";
    17.  else
    18.   {
    19.   $val=mysql_query("SELECT id FROM users
    20.                       WHERE nik='$login'",$link);
    21.   if(!$val)
    22.    $message .="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ник или пароль неправильные";
    23.   else
    24.    {
    25.    $val=mysql_fetch_array($val);
    26.    cleanmembersession($val[0],$login,$password);
    27.    $club_row=checkUser();
    28.    if (!$_SESSION['logged_in'])
    29.     $message .="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ник или пароль неправильные";
    30.    }
    31.   }
    32.  }
    33. //include("top.inc");
    34. print $_SESSION['login'];
    35. if(!$_SESSION['logged_in'])
    36.  print "<br><p><form action='".$PHP_SELF."' method='post'>
    37.  <input type='hidden' name='actionflag' value='login'>
    38.  <input type='hidden' name='".session_name()."' value='".session_id()."'>
    39.  Ник: <input type='text' name='login' value='$login' maxlength=20>
    40.  Пароль: <input type='password' name='password' value='' maxlength=50>
    41.  <input type='submit' value='Войти'>
    42.  </form>";
    43. else
    44.  {
    45.  $message="Добро пожаловать ".$login." <a href='$PHP_SELF?logout=true'>выйти</a>";
    46.  }
    47. print "<b>$message</b>";
    48. ?>
    эти оба файла инклюдятся на каждой странице сайта, проблема состоит в том что когда я логинюсь, то сразу после создается сессия, все нужные переменные, но как только я перехожу на другую страницу сессия исчезает и он опять просит ввести логин и пароль....
     
  2. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  3. dima_mak

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

    С нами с:
    25 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Я уже пытался найти ошибку - не получилось - прошу помощи....
    доступа к рнр.ини у меня нет, а другими средствами не получилось найти причину....
     
  4. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    А файл dblib.php тоже в каждую страницу инклудится? Если нет - надо фразу session_start(); написать в login.php, а не в dblib.php.
     
  5. dima_mak

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

    С нами с:
    25 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    он да инклюдится

    З.Ы
    пытался засунуть сесион_старт в начало каждой страницы - не помогло.....
     
  6. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Не уверен, но попробуйте вот в этой строчке:
    PHP:
    1. if(!(!$club_row || $club_row[nik] != $_SESSION['login'] || $club_row[password] != $_SESSION['password']))
    2.  
    убрать первый "!" - то есть, получится:
    PHP:
    1. if((!$club_row || $club_row[nik] != $_SESSION['login'] || $club_row[password] != $_SESSION['password']))
    2.  
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Код (Text):
    1.  session_unset();
    2.  session_register("login");
    3.  $_SESSION[login]=$login;
    4.  session_register("password");
    5.  $_SESSION[password]=$pass;
    6.  session_register("iid");
    7.  $_SESSION[iid]=$id;
    8.  session_register("logged_in");
    9.  $_SESSION[logged_in]=true;
    у меня такое жопное подозрение что при таком именовании ты не передаешь имя ключа в массиве а говоришь в какой константе это искать. по идее работать НЕ должно.
    Код (Text):
    1. $_SESSION['login']
    а так должно

    сейшн_старт не нужно пихать во все скрипты. нужно ПЕРЕД первой операцией с глобальным массивом $_SESSION

    для самостоятельной отладки сценария в начале скрипта можно прописать error_reporting(E_ALL)

    RomanBush учи матлогику. убрав ! ты меняешь смысл условия на противоположное
     
  8. dima_mak

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

    С нами с:
    25 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Не помогло.
    сделал еррор_репортинг, выдало:
    Код (Text):
    1. Notice: Undefined index: err in /www/my2gig.com/r/o/a/roadtrip/htdocs/login.php on line 2
    2.  
    3. Notice: Undefined index: login in /www/my2gig.com/r/o/a/roadtrip/htdocs/login.php on line 3
    4.  
    5. Notice: Undefined index: password in /www/my2gig.com/r/o/a/roadtrip/htdocs/login.php on line 4
    6.  
    7. Notice: Undefined index: actionflag in /www/my2gig.com/r/o/a/roadtrip/htdocs/login.php on line 5
    8.  
    9. Notice: Undefined index: logout in /www/my2gig.com/r/o/a/roadtrip/htdocs/login.php on line 6
    10.  
    11. Notice: Undefined variable: _SESSION in /www/my2gig.com/r/o/a/roadtrip/htdocs/login.php on line 32
    12.  
    13. Notice: Undefined variable: PHP_SELF in /www/my2gig.com/r/o/a/roadtrip/htdocs/login.php on line 34
     
  9. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    такс, строки 2-6 понятны
    32: отсутствие _SESSION может обуславливаться запретом на исопльзование сессий. сделийте вывод phpinfo(); exit; после session_start(); и попробуйте найти про сессии
    34: погуглив можно заметить что такая переменная доступна только если register_globals = on. в твоем случае оно скорее всего off и переменной нет, зато ее можно попробовать достать так - $_SERVER['PHP_SELF']
     
  10. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Логично. Я для этого и сказал ему убрать "!". Просто с ходу не пойму, правильна ли логика данного ифа, а ковыряться не охота - проще инвертировать и посмотреть - вдруг заработает.