在zend框架中传递和恢复会话ID

时间:2010-08-05 19:56:07

标签: php zend-framework sessionid

首先,是的,我知道这是一个很大的安全性 NONO 。但情况是这样的;

在网上商店结账时,我使用支付网关,可以通过SSL代理我的结账表单。

(以下网址只是理论,其他网址适用于申请)

它的工作方式,网站将用户重定向到他们的 https ://gateway.org/secure-tunnel.php,在这样的查询中传递一个网址?url = http://myshop.com/cc-form.php&lt ; - 需要进行urlencoded。

安全隧道请求网址 - 在文档中的网址上撒上一些魔法 - 并将其显示给用户。

现在我想将会话ID传递给cc-form.php网址,并使该部分正常工作。但是请求的页面不会获取传递的会话ID。

有关于此的任何想法吗?

以下内容来自我的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!

嗯..结果不需要以前的编辑。就在我将之前的行添加到bootstrap之前,我还更改了url布局。

将其从/pay/UPSSESSID/{session-id-here}更改为/pay?UPSSESSID={session-id-here} - 这实际上是问题的根源:(

现在我已经从引导程序中删除了行,并且我正确恢复了sessionId。

我的错误!

1 个答案:

答案 0 :(得分:0)

默认情况下,PHPSESSID不能作为URL重写的一部分传递。

?PHPSESSID={session_id} - 格式解决了我的问题。