Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Доступ к сессии не из веб-приложения


Автор: POLTER 20.3.2008, 14:51
Здравствуйте.
На сервере выполняется некий демон на PHP.
И есть веб-приложение, которое использует сессии (тоже на PHP).
Мне нужно из демона получить доступ к сессии веб-приложения, зная её SID.
Можно ли как-то это сделать, не лазяя напрямик в файл и таблицу бд, где хранится сессия?
Если да, то как?
Спасибо.

Автор: Canarat 20.3.2008, 14:58
POLTER
Цитата(POLTER @  20.3.2008,  14:51 Найти цитируемый пост)
напрямик в файл и таблицу бд, где хранится сессия?

нет, ибо в такой постановке задачи само по себе противоречие.

Автор: POLTER 20.3.2008, 15:05
Цитата

в такой постановке задачи само по себе противоречие.

Ну, я имел в виду, получить доступ через массив $_SESSION, без написания собственных обработчиков сессии.

Автор: skyboy 20.3.2008, 15:09
первым делом замечу, что проще подобное делать через такие механизмы, которые и призваны быть "способом обмена информацией": БД или файлы. Тем более, что можно сделать сохранение в базу "прозрачным": при помощи http://ua.php.net/manual/en/function.session-set-save-handler.php установить собственный механизм записи, хранения и чтения. тогда в твоем "веб-приложении" будет работа с данными через переменную $_SESSION, а в демоне - обращением к непосредственному месту хранения установленному тобой(в БД).
но если так уж хочется обойтись без БД(месье желает извращений?  smile ), то могу предложить следующее.
1. сформировать страницу(скажем, return_session_var.php) 
Код

<?php
session_start();
print_r($_SESSION);
?>

2. демон будет обращаться к странице через lopback('127.0.0.1/return_session_var.php?PHPSESSID='.$phpSessionID) посредством сокетов или cURL(обычно так чужие страницы получают и парсят)   и обрабатывай содержимое.

Автор: POLTER 20.3.2008, 15:12
Ясно, спасибо!

Автор: skyboy 20.3.2008, 15:14
можешь попробовать установить "знаемое демоном session id" при помоши http://ua.php.net/session_id.
не на чем проверить.
Код

session_id($my_saved_session_id);
session_start();


Автор: POLTER 20.3.2008, 16:15
Это я первым делом попробовал, но оно не работает в не-веб приложении.
Так что буду модифицировать таблицу в бд с сессией.

Автор: Feldmarschall 20.3.2008, 19:47
что значит - не работает? еси приложение написано на РНР, то не "не работает", а приложение написано криво.

и не забывать в демоне закрывать сессию после работы с ней.

Автор: POLTER 20.3.2008, 22:35
Ну незнаю, может что-то неправильно делаю?
Вот просто пример:
Код

<?php
session_id('0h0l3f9gj10adk6lbe90ntlja6');
session_start();
echo $_SESSION['nick'];
session_write_close();
?>

Если запускаю из браузера, то выводит, что требовалось.
А из консоли:
Код

PHP Notice:  Undefined index:  nick in C:\Htdocs\ttt.php on line 4

Автор: Feldmarschall 21.3.2008, 00:52
файлы сессий консольный пых откуда берет?

Автор: POLTER 22.3.2008, 00:49
О, прописал в php.ini session_save_path, теперь работает везде.
Спасибо большое за наводку! То, что мне нужно было smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)