Всем привет, очень надеюсь с Вашей помощью разобраться в проблеме. Вводная: 1. Есть сервер (Apache+PHP). Требует авторизации (через GET-запрос), дальше на GET-запросы возвращает JSON. 2. Есть скрипт на PHP, который выступает в роли клиента. Первым делом авторизуется на сервере, затем пытается вызвать GET-запрос. 3. Сервер работает на сессиях (при авторизации в БД выбираем id пользователя и сохраняем его в сессионных переменных). При получении дальнейших запросов проверяем, что есть определенная сессионная переменная и соответственно возвращаем некий результат. Если этой переменной нет, то говорим, что сессия протухла и требуем авторизоваться Если GET-запросы делать через браузер, то все работает, т.е. сессия на сервере живет. Если запускаю PHP-скрипт, то авторизация проходит, но дальше все время получаю протухшую сессию. Что пытался сделать: пытался на этапе авторизации вернуть в скрипт ID сессии и вставить этот ID в следующий запрос, т.е. вместо Код (Text): http://url.com/index.php?param=123 отправляю запрос Код (Text): http://url.com/index.php?param=123&PHPSESSID=j9he34alf8s29bqq1t8kktq5t7 Не помогает... К серверу обращаюсь вот так: Код (Text): $lines = file('http://url.com/index.php?action=enter&PHPSESSID=j9he34alf8s29bqq1t8kktq5t7'); foreach ($lines as $line) { $res = json_decode($line, true); } Где и что я делаю неправильно? Заранее спасибо за помощь
В БД... Вариант конечно, но тогда придется городить функционал сессий самому, в том числе протухание сессии... Идеальный вариант использовать штатные возможности, предлагаемые PHP, но если не найду как обойти, то видимо придется изобретать велосипед
где ты тут передаёшь cookie с идентификатором сессии? Обращайся через cURL там есть возможность получать и отправлять cookie
Я не передаю cookie, я передаю ID сессии в GET['PHPSESSID']. Этот механизм описан в документации к PHP как вариант работы при отключенных cookie. Про cURL почитаю, но есть одно "НО". Есть аналогичный скрипт на javascript, там та же проблема Но про javascript я здесь писать не буду
fiddler не ловит трафик от php-скрипта... --- Добавлено --- Поймал сессию браузера, попытался в PHPSESSID запихать ее идентификатор, не помогло. Надо как-то научится ловить на стороне сервера PHPSESSID, но как, не понятно.
Разобрался В php.ini есть настройка session.use_only_cookies. По умолчанию она = 1, т.е. идентификатор сессии берется только из cookie. Решение: 1. Прописать настройку в 0 в php.ini. Не очень правильно, т.к. будет действовать для всех сайтов на данном сервере 2. В своих скриптах в session_start() передавать [use_only_cookies => 1] 3. Перед session_start() вызывать функцию session_id($id), где $id - это ID нашей php-сессии (его передавать в GET). Я прикрутил себе третий вариант PHP: if ($_GET['PHPSESSID']) {session_id($_GET['PHPSESSID']);} Если делать без if, то слетают сессии в браузере. Ссылка на доку: http://www.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies Большое спасибо всем за помощь!!!