Уважаемые гуру, подскажите пожалуйста.
Когда пользователь устанавливает автозалогинивание, информация о нем, естественно, устанавливается в куку. Как я понял, она называется <имя куки>_data.
В связи с этим два вопроса.
1. Стоит задача определить, залогиненный это пользователь или нет, в домене уровнем выше, чем форум - то есть форум находится в домене forum.domen.ru, а куку хочется считать из domen.ru или www.domen.ru Вопрос - устанавливается ли кука по умолчанию так, чтобы это было возможно сделать, а если нет, то как доработать?
2. С кукой сессии <имя куки>_sid всё понятно, а вот что из себя структурно представляет кука <имя куки>_data ? Судя по всему, там содержится хэш пароля, что-то еще...
выглядит она так:
<некая последовательность>autologinid<некая последовательность>userid<некая последовательность>
Каким образом ее стоит разбирать, дабы соотнести с конкретным пользователем из таблицы users?
спасибо.
Расскажите об аутентификации в phpbb
-
- Former team member
- Сообщения: 6517
- Зарегистрирован: 20 лет 9 месяцев
- Откуда: Бердск
Именно через cookie это сделать нереально.Ivantor писал(а):Стоит задача определить, залогиненный это пользователь или нет, в домене уровнем выше
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
-
- phpBB Guru
- Сообщения: 5484
- Зарегистрирован: 21 год 1 месяц
- Поблагодарили: 2 раза
Она из себя представляет сериализованный массив данных. В php превратить его обратно в массив можно функцией unserialize.Ivantor писал(а):а вот что из себя структурно представляет кука <имя куки>_data
В нем 2 переменные
Код: Выделить всё
$sessiondata['autologinid'];
$sessiondata['userid']
С конкретным пользователем это соотносится таким запросом
Код: Выделить всё
$sql = 'SELECT u.*
FROM ' . USERS_TABLE . ' u, ' . SESSIONS_KEYS_TABLE . ' k
WHERE u.user_id = ' . (int) $user_id . "
AND u.user_active = 1
AND k.user_id = u.user_id
AND k.key_id = '" . md5($sessiondata['autologinid']) . "'";
Код: Выделить всё
//
// Are auto-logins allowed?
// If allow_autologin is not set or is true then they are
// (same behaviour as old 2.0.x session code)
//
if (isset($board_config['allow_autologin']) && !$board_config['allow_autologin'])
{
$enable_autologin = $sessiondata['autologinid'] = false;
}
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Xpert
поигрался и попытался поанализировать эту самую куку (на моей платформе всё-таки дикие проблемы с deserialize, приходится парсить как строку).
a:2:{s:11:"autologinid";s:32:"2153ae6df7348932f14daf71f2ccdfe7";s:6:"userid";i:2;} - залогинен с запоминанием
a:2:{s:11:"autologinid";s:32:"1b592ef33bba0f627953c1ff3fc824c6";s:6:"userid";s:1:"2";}
a:2:{s:11:"autologinid";s:32:"0c2605000f02c6be8c242fc081b816c1";s:6:"userid";i:2;}
a:2:{s:11:"autologinid";s:32:"f16d743388985f060dd5c8a034494e5a";s:6:"userid";s:1:"2";}
a:2:{s:11:"autologinid";s:0:"";s:6:"userid";i:-1;} - отлогинен
a:2:{s:11:"autologinid";s:0:"";s:6:"userid";s:1:"2";} - без запоминания, тока в течение текущей сессии
Собственно, получается, что в случае, если s:32, то в куке есть автологинид. если s:0 - то нету. Замечательно.
Цифра 2 - это мой юзер_ид
почему-то на конце строк получается либо
s:1:"2";
либо
i:2
1. Вы не могли бы разъяснить разницу между этими случаями, в каком случае что на конце куки возникает?
2. Что означает a:2 s:11 в начале строк, и правильно ли я понимаю, что они не меняются никогда, также как и s:6 в середине строки?
поигрался и попытался поанализировать эту самую куку (на моей платформе всё-таки дикие проблемы с deserialize, приходится парсить как строку).
a:2:{s:11:"autologinid";s:32:"2153ae6df7348932f14daf71f2ccdfe7";s:6:"userid";i:2;} - залогинен с запоминанием
a:2:{s:11:"autologinid";s:32:"1b592ef33bba0f627953c1ff3fc824c6";s:6:"userid";s:1:"2";}
a:2:{s:11:"autologinid";s:32:"0c2605000f02c6be8c242fc081b816c1";s:6:"userid";i:2;}
a:2:{s:11:"autologinid";s:32:"f16d743388985f060dd5c8a034494e5a";s:6:"userid";s:1:"2";}
a:2:{s:11:"autologinid";s:0:"";s:6:"userid";i:-1;} - отлогинен
a:2:{s:11:"autologinid";s:0:"";s:6:"userid";s:1:"2";} - без запоминания, тока в течение текущей сессии
Собственно, получается, что в случае, если s:32, то в куке есть автологинид. если s:0 - то нету. Замечательно.
Цифра 2 - это мой юзер_ид
почему-то на конце строк получается либо
s:1:"2";
либо
i:2
1. Вы не могли бы разъяснить разницу между этими случаями, в каком случае что на конце куки возникает?
2. Что означает a:2 s:11 в начале строк, и правильно ли я понимаю, что они не меняются никогда, также как и s:6 в середине строки?
-
- phpBB 2.0.3
- Сообщения: 384
- Зарегистрирован: 19 лет 9 месяцев
- Откуда: Москва, Fortuna-net
это внутренний формат функции serialize(). так что тебе скорее на форум http://php.ru с такими вопросами. парсить эту вещь как строку - изврат. unserialize() должны корректно работать на всех платформах, где запускается интерпритатор php
NETBYNET Holding system administrator
-
- phpBB 2.0.2
- Сообщения: 340
- Зарегистрирован: 18 лет 8 месяцев
svk писал(а):так что тебе скорее на форум http://php.ru с такими вопросами. парсить эту вещь как строку - изврат. unserialize() должны корректно работать на всех платформах, где запускается интерпритатор php
m157ym157y писал(а):то думаю просто кому-то стоит сначала пхп чуть-чуть подучить, а после трогать phpBB )
вашим советом воспользуюсь как-нить в другой раз - разработка ведется на ASP/Vbscript. ...может быть Вы, как знаток php и функции serialize в частности, ответите мне?

Добавлено спустя 25 минут 28 секунд:
svk
спасибо за хороший совет, на php.ru нашел, оказывается, всё очень просто
Код: Выделить всё
<?
/*
Anatomy of a serialize()'ed value:
String
s:size:value;
Integer
i:value;
Boolean
b:value; (does not store "true" or "false", does store '1' or '0')
Null
N;
Array
a:size:{key definition;value definition;(repeated per element)}
Object
O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}
String values are always in double quotes
Array keys are always integers or strings
"null => 'value'" equates to 's:0:"";s:5:"value";',
"true => 'value'" equates to 'i:1;s:5:"value";',
"false => 'value'" equates to 'i:0;s:5:"value";',
"array(whatever the contents) => 'value'" equates to an "illegal offset type" warning because you can't use an
array as a key; however, if you use a variable containing an array as a key, it will equate to 's:5:"Array";s:5:"value";',
and
attempting to use an object as a key will result in the same behavior as using an array will.
*/
?>
