Не могу разобраться с кукисами

Discussion in 'PHP' started by Дикс, 2 May 2006.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Совсем каша в голове :(
    В верху индекс.пхп стоит такой код:
    PHP:
    session_start();

    if (!isset(
    $HTTP_COOKIE_VARS['userstatus']) && !isset($HTTP_COOKIE_VARS['username'])) 
    {
        
    setcookie("userstatus"1);
        
    setcookie("username"'guest');
    }
    if (!isset(
    $HTTP_SESSION_VARS['userstatus']) && !isset($HTTP_SESSION_VARS['username'])) 
    {
        
    $HTTP_SESSION_VARS['userstatus'] = $HTTP_COOKIE_VARS['userstatus'];
        
    $HTTP_SESSION_VARS['username'] =   $HTTP_COOKIE_VARS['username'];

    }
    if (isset(
    $HTTP_SESSION_VARS['im_login']) && $HTTP_SESSION_VARS['im_login'] == 1)
    {
        
    setcookie("userstatus"$HTTP_SESSION_VARS['userstatus']);
        
    setcookie("username"$HTTP_SESSION_VARS['username']);
    }


    // не знаю как по другому обновить куки при введении пароля и логина на странице log in.
    // потому что пишет что другие хидеры уже отправлены, а сайт модульный - страница log in
    // инклудится в тело index.php. Я сделал так что при логине вводятся логин и пароль, проверяются на соответствие, а затем вносятся в массив
    // сессий:
    //  login.php:
    //        $HTTP_SESSION_VARS['username'] = $username;
    //        $HTTP_SESSION_VARS['userstatus'] = $userstatus;
    //        $HTTP_SESSION_VARS['im_login'] = 1; // на главной странице стоит проверка. если она обнаружит включённой эту опцию, то автоматически обновит куки.


    #-------------------------------------
    echo ("Cookie [<b>".$HTTP_COOKIE_VARS['username']." - ".$HTTP_COOKIE_VARS['userstatus']."</b>]<br />");
    echo (
    "Session [<b>".$HTTP_SESSION_VARS['username']." - ".$HTTP_SESSION_VARS['userstatus']."</b>]<br />");
    В итоге, когда я вхожу на сайт, вижу:

    Cookie [guest - 1]
    Session [guest - 1]

    Жму логин, ввожу логин-пароль, получаю:
    Cookie [guest - 1]
    Session [admin - 3]

    Обновляю страницу:
    Cookie [admin - 3]
    Session [admin - 3]

    Вот это мне и нужно было с самого начала - чтобы постоянно было admin - 3
    Почему при входе на сайт срабатывает условие

    if (!isset($HTTP_COOKIE_VARS['userstatus']) && !isset($HTTP_COOKIE_VARS['username']))

    как будто этих кук и не существовало?

    Чо за мазафака? Почему сессии задаются сразу, а куки после обновления?


    И ещё небольшой вопрос - где искать куки Оперы 8.54?
    Куки Едитор 1.9.1 вообще заточен лишь под осла и фарефокз, где найти более вменяемую прогу?
     
  2. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Инструменты -> Быстрые настройки -> Site Preferences -> Cookies
    И в опере и так встроен редактор кук.
     
    1 person likes this.
  3. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    А не проще ли?
    PHP:
    <?
    if(isset(
    $auth)){unset($auth);}
      
    session_start(); 
      
    session_register('auth');
      if(!isset(
    $auth['login'])){
        if(isset(
    $login) && isset($password) && ($login!='' && $password!='')){
          
    /* Проверка правильности логина и пароля. Если верно - то пишем в $auth['login'] и $auth['status'] значения из БД, иначе пишем опять же $auth['login']='quest'; $auth['status']='1';*/
        
    }else{
          
    $auth['login']='quest';
          
    $auth['status']='1';
       }
    }
    print_r($auth);
    ?>
    <!-- форма авторизации -->
    А насчет твоей проблемы.... смотри
    PHP:
    if (isset($HTTP_SESSION_VARS['im_login']) && $HTTP_SESSION_VARS['im_login'] == 1)
    {
        
    setcookie("userstatus"$HTTP_SESSION_VARS['userstatus']);
        
    setcookie("username"$HTTP_SESSION_VARS['username']);

    Вот ты пишешь куки. А выводишь их на страницу с помощью переменных типа $_COOKIE, которые являются переменными окружения PHP и генерятся не каждый раз при обращении к setcookie() а при каждом запуске php или mod_php в апаче. Т.е. грубо говоря после рефреша страницы. Решение достаточно простое:
    PHP:
    if (isset($HTTP_SESSION_VARS['im_login']) && $HTTP_SESSION_VARS['im_login'] == 1)
    {
        
    setcookie("userstatus"$HTTP_SESSION_VARS['userstatus']);
        
    setcookie("username"$HTTP_SESSION_VARS['username']);
        
    $HTTP_COOKIE_VARS['username']=$HTTP_SESSION_VARS['username'];
        
    $HTTP_COOKIE_VARS['userstatus']=$HTTP_SESSION_VARS['userstatus'];

    Но авторизация у тебя ну очень навинчиная, можно все ГОРАЗДО проще, понятнее и эффективнее. Хотя дело твое
     
    _________________________
    1 person likes this.
  4. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Респект, Trinux!
    После добавления строк
    PHP:
     $HTTP_COOKIE_VARS['username']=$HTTP_SESSION_VARS['username']; 
        
    $HTTP_COOKIE_VARS['userstatus']=$HTTP_SESSION_VARS['userstatus'];
    мой кривой и глючный код заработал как нада. Пока оставлю так, лишь бы работало,
    допишу основу двигла и затем буду апгрейдить потихоньку.

    ЗЫ где ты учился программированию?
    ЗЫЫ 2 EST a1ien:
    я знаю про редактор куков. меня интересует хранятся ли они где-нить в виде файлов как у осла?
     
  5. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    мне в 5 подарили спекрум. В 7 лет его отобрали за то, что я написал прогу, которая решала за меня домашку по математике... не знаю где научился... само как-то научилось =)

    P.S. совету купить книги по алгоритмизации (а лучше взять в библиотеки. Годов примерно 1990-1992), обязательно "Основы програмиирования" и вообще любую литературу про языки программировния конца 80-ых, начала 90-ых годов.
     
    _________________________
  6. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    надеюсь поступлю этим летом в универ на кодера %)
    тогда всё и изучу
    а так я дома книжки и по С и по пхп, html, javascript читал.
    щас купил за 500р. здоровую по mysql = )
     
  7. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Книги что и инст - учат быть банальным. Праквильно, как ты заметил, кодером. А программирование - совсем другая тема
     
    _________________________
    1 person likes this.
  8. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    ну по-крайней мере они хоть чему то учат. я давно понял что дома не стану кодером сам, к тому же времени совсем нет что-то самостоятельно изучать.