Куда девается переменная сессии? помогите плз.

Тема в разделе "PHP", создана пользователем nick1m, 14 окт 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. nick1m

    nick1m Постоялец

    Регистр.:
    20 фев 2008
    Сообщения:
    119
    Симпатии:
    8
    торможу, не могу понять почему обнуляется переменная $_SESSION['login'] при повторной отправке формы form name="form_select", пара для авторизации z-z как видно из "скрипта", не могу понять где туплю, прописываю другие данные в массив $_SESSION - все ок, здесь ничего не пойму...
    PHP:
    <?php
    session_save_path
    ("./sid");
    ini_set("session.use_trans_sid"true);
    session_name("authorize");
    session_start();
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    </head>
    <body>
    <?php
    var_dump
    ($_SESSION);
    echo 
    '<hr>';
    // массив аккаунтов
    $login_ar=array("z"=>"z");
    // БЛОК АВТОРИЗАЦИИ
    // проверяем запрос авторизации и если есть, прописываем в сессию, что авторизован, а также записываем логин в переменную сессии, также если выполнен выход, в авторизацию ставим фэлс, но если был передан пароль и ненашлось совпадения  - прописываем в сессию "дефект", что значит - плохой пароль
    // если пользователь ввел данные в форму авторизации
    if ($login_ar[trim($HTTP_POST_VARS['login'])]==trim($HTTP_POST_VARS['password'])) {
        
    $_SESSION['isAuthorized']=true;
        
    $_SESSION['login']=$HTTP_POST_VARS['login'];
    }
    else {
        
    $alert='defect'
    }
    if (
    $HTTP_POST_VARS['alert']=='oute') {
        
    $_SESSION['isAuthorized']='false';
        
    $_SESSION['login']='';
        
    $alert='oute';
        }
    // если пользователь авторизован
    if($_SESSION['isAuthorized']!='true'){ 
        if (
    $alert=='defect') {
            echo 
    "Ошибка авторизации, пожалуйста введите правильно логин и пароль:<br><br>";
        }
        if (
    $alert=='oute') {
            echo 
    "Сеанс завершён:<br><br>";
        }
        
    // выводим форму авторизации
        
    ?>
    <form name="form_authorized" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">
        Логин: <input type="text" name="login"> &nbsp;&nbsp;&nbsp;Пароль: <input name="password" type="password"> <input name="" type="submit" value="войти">
    </form>    
        <?php
    }
    // если авторизован
    else {
    ?>
    <div align="right">
    <form name="form_logoute" method="post" action="<?$_SERVER['SCRIPT_NAME']?>">
      <input type="hidden" name="alert" value="oute">
      <strong>Пользователь: 
        <?php
            
    echo $_SESSION['login'];
        
    ?>
    </strong>
    <input type="submit" name="button" id="button" value="Выход">
    </form>
    </div>
    <!-- когда 2-й раз отправляем запрос из последней формы, $_SESSION['login'] присваивается 'NULL' /-->
    <hr>
    <form name="form_select" method="post" action="">
      <input name="" type="submit" value="поиск">
    </form>
    <hr>
    <?php
    }
    ?>
    </body>
    </html>
     
  2. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    731
    Симпатии:
    421
    От такого убожества
    PHP:
    if ($login_ar[trim($HTTP_POST_VARS['login'])]==trim($HTTP_POST_VARS['password']))
    надо уходить!!! :read:

    Вот так все работает:
    PHP:
    <?php
    error_reporting
    (0);
    //session_save_path(".\\sid");
    //ini_set("session.use_trans_sid", true);
    //session_name("authorize");
    session_start();
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    </head>
    <body>
    <?php
    var_dump
    ($_SESSION);
    echo 
    '<hr>';
    // массив аккаунтов
    $login_ar=array("z"=>"z");
    // БЛОК АВТОРИЗАЦИИ
    // проверяем запрос авторизации и если есть, прописываем в сессию, что авторизован, а также записываем логин в переменную сессии, также если выполнен выход, в авторизацию ставим фэлс, но если был передан пароль и ненашлось совпадения  - прописываем в сессию "дефект", что значит - плохой пароль
    // если пользователь ввел данные в форму авторизации
    if ( $HTTP_POST_VARS['login']=='z' and $HTTP_POST_VARS['password']=='z') {
        
    $_SESSION['isAuthorized']=true;
        
    $_SESSION['login']=$HTTP_POST_VARS['login'];
    }
    else {
        
    $alert='defect'
    }
    if (
    $HTTP_POST_VARS['alert']=='oute') {
        
    $_SESSION['isAuthorized']='false';
        
    $_SESSION['login']='';
        
    $alert='oute';
        }
    // если пользователь авторизован
    if($_SESSION['isAuthorized']!='true'){ 
        if (
    $alert=='defect') {
            echo 
    "Ошибка авторизации, пожалуйста введите правильно логин и пароль:<br><br>";
        }
        if (
    $alert=='oute') {
            echo 
    "Сеанс завершён:<br><br>";
        }
        
    // выводим форму авторизации
        
    ?>
    <form name="form_authorized" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">
        Логин: <input type="text" name="login"> &nbsp;&nbsp;&nbsp;Пароль: <input name="password" type="password"> <input name="" type="submit" value="войти">
    </form>    
        <?php
    }
    // если авторизован
    else {
    ?>
    <div align="right">
    <form name="form_logoute" method="post" action="<?$_SERVER['SCRIPT_NAME']?>">
      <input type="hidden" name="alert" value="oute">
      <strong>Пользователь: 
        <?php
            
    echo $_SESSION['login'];
        
    ?>
    </strong>
    <input type="submit" name="button" id="button" value="Выход">
    </form>
    </div>
    <!-- когда 2-й раз отправляем запрос из последней формы, $_SESSION['login'] присваивается 'NULL' /-->
    <hr>
    <form name="form_select" method="post" action="">
      <input name="" type="submit" value="поиск">
    </form>
    <hr>
    <?php
    }
    ?>
    </body>
    </html>
     
  3. nick1m

    nick1m Постоялец

    Регистр.:
    20 фев 2008
    Сообщения:
    119
    Симпатии:
    8
    вообщем я так понял, что вся причина была в
    PHP:
    //session_name("authorize");
    или не понял вообще

    я переписал так:
    PHP:
    session_save_path("./sid");
    ini_set("session.use_trans_sid"true);
    session_name("authorize");
    session_start();
    $authorize_arr=& $_SESSION['authorize']; // массив куда складываем переменные в данной сессии
    ?>
    и все заработало

    ну а то, что я пробелы обрезал, то причем здесь убожество, данные надобы еще получше проверить, ничего это не меняло, просто, набрасывал авторизацию...

    Но всеравно, пасиб за ответ
     
  4. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    731
    Симпатии:
    421
    Вы слишком много наворачиваете в простой программный код.
    Что касается моего описания, то я не про trim имеk ввиду, а про использование массивов при сравнении. То что Вы переписали и заработало хорошо, но мой код выше тоже рабочий ))) Вот и думайте что за что отвечает! ;)
     
Статус темы:
Закрыта.