За последние 24 часа нас посетили 35430 программистов и 1814 роботов. Сейчас ищут 827 программистов ...

Не отпускают куки

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

  1. Roman Koff

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

    С нами с:
    8 апр 2010
    Сообщения:
    5
    Симпатии:
    0
    Если делать сохранение даных о пользователе в куках, то при логауте:

    PHP:
    1. setcookie('login', '', 0, "/");
    2. setcookie('password', '', 0, "/");
    3. if (isset($_SESSION['user_id'])) unset($_SESSION['user_id']);
    приходится делать операцию дважды, чтобы в текущей сессии пользователь точно вышел.
    Хотя логаут реально происходит, но пользователя текущей сессии не "отпускает".

    Если закрыть браузер и войти снова, то пользователь уже не авторизован.

    С чем может быть связан это глюк? Может куки всетаки еще живут некоторое время?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а вы проверяете авторизованность пользователя через куку?

    или у вас сессионные данные не разрушаются?

    Roman Koff
    Может куки всетаки еще живут некоторое время?
    сколько живут куки вас вобще не должно колебать. кука это текстовичек на компе у посетителя. Кукам веры нет. В куках можно хранить любимый цвет пользователя. не более того. Ну или какое-то рандомное число, которое для вас что-то значит, но для всех остальных - загадошный мусор.
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    PHP:
    1.  
    2. <?php
    3. header ('Location: ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    4.  
     
  4. Roman Koff

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

    С нами с:
    8 апр 2010
    Сообщения:
    5
    Симпатии:
    0
    Всеравно не отпускает. Если логиниться без ремембера, то все работает сразу, с ремембером -- два раза надо жать.

    PHP:
    1. $PASSWORD_SALT = 'blablabla';
    2. $ADMIN_LOGIN = 'admin';
    3. $ADMIN_PASSWORD = 'xxx';
    4.  
    5. // вход пользователя
    6. function UserLogin($lgn, $pwd, $rmb = false)
    7. {
    8.     if (testUserLP($lgn, $pwd))
    9.     {
    10.         if ($rmb == true)
    11.         {
    12.             $time = 86400; // на 24 часа
    13.             setcookie('login', $lgn, time() + $time, "/");
    14.             setcookie('password', $pwd, time() + $time, "/");
    15.         }
    16.         $_SESSION['user_id'] = 1;
    17.         return true;
    18.     }
    19.     else
    20.     {
    21.         return false;
    22.     }
    23. }
    24.    
    25. // выход пользователя
    26. function UserLogout()
    27. {
    28.     setcookie('login', '', 0, "/");
    29.     setcookie('password', '', 0, "/");
    30.     if (isset($_SESSION['user_id'])) unset($_SESSION['user_id']);
    31.     header('Location: ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    32.     return;
    33. }
    34.  
    35. // кэш пароля
    36. function getPasswordHash($pwd)
    37. {
    38.     global $PASSWORD_SALT;
    39.     return md5(md5($pwd) . $PASSWORD_SALT);
    40. }
    41.  
    42. // проверка логина и пароля
    43. function testUserLP($lgn, $pwd)
    44. {
    45.     global $ADMIN_LOGIN;
    46.     global $ADMIN_PASSWORD;
    47.     return ($lgn == $ADMIN_LOGIN) && (getPasswordHash($pwd) == $ADMIN_PASSWORD);
    48. }
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    предлагаю такую систему:
    в куках сохранять логин и рандомное число знаков на 12-16.
    в бд делать запись логин-число. несколько таких записей для того, чтобы чел мог запоминаться на разных компах если надо.

    когда чел приходит - смотреть куку и смотреть если такая пара логин-число. Если есть - он в деле. =)

    если чел выходит - удалять эту запись.

    таким образом, даже если запись в куках сохранится, то все равно придется логиниться заново, если в бд нет такой пары.