Передайте и восстановите идентификатор сеанса в Zend Framework - PullRequest
0 голосов
/ 05 августа 2010

Во-первых, да, я знаю, что это большая безопасность НЕТ . Но сценарий таков;

При оформлении заказа в интернет-магазине я использую платежный шлюз, который может прокси-форму моей проверки через их SSL.

(следующие URL-адреса - только теория, другие URL-адреса применяются для приложения)

Как это работает, веб-сайт перенаправляет пользователя на его https : //gateway.org/secure-tunnel.php, передавая URL-адрес в запросе, как этот? Url = http://myshop.com/cc-form.php < - должен быть закодирован.

Защищенный туннель запрашивает URL-адрес - добавьте магию по URL-адресу в документе - и покажет его пользователю.

Теперь я хочу передать идентификатор сеанса в URL cc-form.php, и эта часть заработала. НО запрашиваемая страница не принимает переданный идентификатор сеанса.

Есть идеи на этот счет?

Следующее из моего application.ini

resources.session.name = UPSSESSID
resources.session.save_path = APPLICATION_PATH "/../data/session"
resources.session.use_only_cookies = off
resources.session.referer_check = off
resources.session.remember_me_seconds = 864000

Также во время исследования я обнаружил, что расширение Suoshin может вызывать некоторые проблемы, поэтому я добавил это в .htaccess

php_flag suhosin.session.cryptua off

Я использую маршрут к моей платежной форме

$this->_helper->url->url(array(session_name() => Zend_Session::getId()), 'payment')

РЕДАКТИРОВАТЬ: возможно, довольно хитрое решение

Мне действительно удалось восстановить сеанс, вставив его в _initApplication() в моем файле начальной загрузки. Это довольно хитроумно, так что, если кто-нибудь знает о лучшем - более ZF'ish - пути, пожалуйста, совет!

    if(isset($_GET[$appConfig->resources->session->name])) {
        session_id($_GET[$appConfig->resources->session->name]);
    }

РЕДАКТИРОВАТЬ: DOH!

Хорошо .. Оказывается, предыдущая правка не нужна. Непосредственно перед тем, как добавить предыдущие строки в загрузчик, я также изменил расположение URL.

Изменил его с /pay/UPSSESSID/{session-id-here} на /pay?UPSSESSID={session-id-here} - И это было на самом деле корень проблемы: (

Теперь я удалил строки из начальной загрузки и сессию, которую я восстановил правильно.

Моя ошибка!

1 Ответ

0 голосов
/ 06 августа 2010

PHPSESSID не может - по умолчанию - быть передан как часть перезаписи URL.

?PHPSESSID={session_id} - формат решил мою проблему.

...