Получить название сессии извне друпала? Реально-ли?

Главные вкладки

Аватар пользователя V I R U S V I R U S 4 января 2014 в 19:12

Привет всем!

Возникла одна проблема. Хочу создать API на базе самописа, без какого-то либо инвока ядра или модулей друпала.
Так вот, в этом самописе хотел бы получить сессию пользователя друпала.

Проблема встаёт в том, что в 7й версии друпала, ключ сессии генерируется рандомом, а не как раньше просто PHPSESSID, посему просто так выудить именно сессию пользователя стало очень сложным.

Для проверки использую такой кусок кода:

<?php
echo '<pre>';
echo 
'SESSION NAME : '.session_name().'<br>';
echo 
'SESSION SSID : '.session_id()  .'<br>';
echo 
'</pre>';
?>

Если я использую его на движке друпала, то session_name() выдаёт что-то вида "SESS25bf34c0393acfb782e7f71d767aaa08", что и является ключём переменной сессии. Если этот код использую на стороннем скрипте, который не вызывает ядро друпала, то ответ приходит вида "PHPSESSID", c пустым значением.

В фаербаге и на друпале и на стороннем скрипте(сабдомене) вижу установленную друпалом куку, тоесть, сама кука передаётся отлично.

Встаёт вопрос лишь в том, как из всех кук получить именно ту, которая относится к сессии пользователя?!

Комментарии

Аватар пользователя sg85 sg85 4 января 2014 в 19:39

Пых по умолчанию хранит сессии в файлах, с одной стороны это удобно, мол не нужны никакие дополнительные серверы, с другой, обращение к файлам довольно медленное, потому в том же Yii, который по дефолту так же хранит сессии в файлах, крайне рекомендуется выносить их в БД(правда там для этого есть готовые средства), однако, друпал, в отличии от приложений на Yii, не может работать без базы данных вообще, собственно по этой причине, там сессии сразу по дефолту хранятся в БД(есть способ их от туда убрать, однако, это весьма сомнительное занятие).
Собственно, посмотрите как друпал работает с сессиями и продублируйте функционал у себя, а так же не забудьте продублировать различные защиты от инъекций, и прочего, для этого обычно используются различные фреймворки, однако, ничто не мешает Вам забутстрапить ядро друпала и использовать его именно как фреймворк, при этом Вы будете иметь доступ ко всем его компонентам, правда цена за это - увеличенный расход памяти в сравнении с тем же Yii примерно в 3 раза(зависит от того, что там у Вас за приложение).

Аватар пользователя V I R U S V I R U S 4 января 2014 в 19:45

RxB,
прежде чем давать столь исчерпывающий комментарий, постарались бы понять суть проблемы.

Я могу без проблем получить значение сессии, НО, лишь зная её ключ. Друпал 7 генерирует рандомные ключи, поэтому я никак не могу подобраться именно к нужной сессии.

Пример: SESS25bf34c0393acfb782e7f71d767aaa08=qLr2CC0QjQSElKT384KTtveCGlfoUxS5LZ4IVX3ff8A; expires=Mon, 27 Jan 2014 19:17:23 GMT; path=/; domain=.domain.com; HttpOnly

Как видно выше, ключ сессии "SESS25bf34c0393acfb782e7f71d767aaa08", а значение её "qLr2CC0QjQSElKT384KTtveCGlfoUxS5LZ4IVX3ff8A".

Так вот как мне извне друпала получить последний сгененированный ключ сессии, когда он динамический?!

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 4 января 2014 в 20:09

"V I R U S" wrote:
прежде чем давать столь исчерпывающий комментарий, постарались бы понять суть проблемы.

Суть проблемы в разных обработчиках сессий, и это написано в мануале по пхп.