За последние 24 часа нас посетили 17639 программистов и 1596 роботов. Сейчас ищут 1675 программистов ...

Проблема с COOKIE

Тема в разделе "Решения, алгоритмы", создана пользователем klerick, 5 апр 2009.

  1. klerick

    klerick Guest

    Сперва расскажу алгоритм.
    Делаю кроссдоменную авторизацию, и посетила мысль, что все можно сделать довольно просто, а именно: есть скрипт auth.php на домене auth.domain.ru, на который передаем для авторизации логин и пароль, тот соответственно сохраняет в куках данные и перебрасывает в закрытую зону client.domain.ru. Каждая страница при проверке авторизации выполняет следующую функцию:
    PHP:
    1.  
    2.     function GetAuthorizationData()
    3.     {
    4.                 $result = false;
    5.                 $file = fopen("http://auth.domain.ru/auth.php", "r");
    6.                 if (!$file)
    7.                 {
    8.                              return $result;
    9.                 }
    10.                 $line = "";
    11.                 while (!feof($file))
    12.         {
    13.             $line .= fgets($file, 1024);
    14.         }
    15.         fclose($file);
    16.         return $line;
    17.     }
    18.  
    19.          //вызывается эта функция
    20.     function IsLoggedIn()
    21.     {
    22.         $res = false;
    23.         $user_data = $this->GetAuthorizationData();
    24.         if(!$user_data)
    25.         {
    26.             return false;
    27.         }
    28.         $data = explode("|", $user_data);
    29.         if(count($data) > 1)
    30.         {
    31.             $cook = $data[0];
    32.             $cook_ks = $data[1];
    33.             if($cook)
    34.             {
    35.                 if ($this->GetUserCheck($cook) == $cook_ks)
    36.                 {
    37.                     $res = $cook;
    38.                 }
    39.             }
    40.         }
    41.         return $res;
    42.     }
    43.  
    Из кода видно, что идет обращение на скрипт авторизации на другом домене, который собирает значения куки и передает их обратно.
    Таким образом, куки хранятся на одном поддомене, а проверка авторизации проходит всегда через один скрипт.

    Проблема в следующем: при обращении к скрипту, тот выдает пустые куки, хотя другую информацию (помимо куки) передает. Пробовал проводить авторизацию на этом же поддомене auth.domain.ru - куки все видны, на другие поддомены - не хочет. Хотя причины в этом не вижу.

    Прошу помочь!

    Если все получится, то выложу скрипт кроссдоменной авторизации. Довольно простой и удобный.
     
  2. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
  3. klerick

    klerick Guest

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

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

    Сейчас вопрос стоит в другом.
     
  4. klerick

    klerick Guest

    http://www.php.ru/forum/viewtopic.php?t=10314 - обсуждение кроссдоменной авторизации проходило. Вот только к разумному единому решению не пришли. Идея с OpenID слишком мудренная и задержки вызывает куда долгие, чем моя идея.
     
  5. Potaevsky

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

    С нами с:
    6 апр 2009
    Сообщения:
    3
    Симпатии:
    0
    Адрес:
    Минск
    Единственное предположение, что у тебя на auth.domain.ru куки вешаются именно на auth.domain.ru, а не на domain.ru. Посмотри, че у тя там с путями
     
  6. klerick

    klerick Guest

    Так они и будут вешаться на auth.domain.ru, а не на domain.ru. Ведь я не могу из под домена делать видным куку на главном домене. :) Это равносильно, что я бы на bla-bla.ucoz.ru портил бы жизнь самому ucoz.ru :)