Zend Session,Zend_Session_SaveHandler_DbTable和Asynchronous Requests

时间:2012-11-26 16:00:37

标签: php zend-framework session

我使用Zend Session结合Zend_Auth和Session Namespaces以下列方式:

的application.ini

    resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
    resources.session.saveHandler.options.name = "session"
    resources.session.saveHandler.options.primary = "id"
    resources.session.saveHandler.options.modifiedColumn = "modified"
    resources.session.saveHandler.options.dataColumn = "data"
    resources.session.saveHandler.options.lifetimeColumn = "lifetime"

自举

     /**
     * Start session 
     */
    public function _initCoreSession() {
        $this->bootstrap('db');
        $this->bootstrap('session');
        Zend_Session::start();
    }

虽然Zend_Auth似乎工作正常,但其他会话命名空间似乎表现得很奇怪。

我使用了几个异步请求(使用jQuery)。

-Init(将数组初始化为会话)

    $ns = new Zend_Session_Namespace('scanner');
    $ns->unsetAll();
    $ns->pages = array();

-Loop(将东西放入数组,此部分称为1到n次)

    //Fetch the Session Namespace
    $ns = new Zend_Session_Namespace('scanner');
    //Set scanned page to true
    $ns->pages[$this->getRequest()->getParam('nextUrl')] = true;

-Finalize(处理数组)

    //Fetch the Session Namespace
    $ns = new Zend_Session_Namespace('scanner');
    //Do stuff with $ns->pages

然而,在调用循环页面变量的某个地方似乎被重置(因此为null)。

这适用于默认会话行为,但是当我设置Zend_Session_SaveHandler_DbTable时它会失败。

*的 修改 *

作为对第一个答案的回应(因为它需要代码块)

我使用$ .post向我的应用程序发出请求。它向应用程序发送带有数据(URL)的请求,并接收状态更新和接下来请求的URL。然后循环直到它没有收到下一个url。

使用jQuery代码

    function scanUrl(url)
    {
        $.post("http://www.example.com/scan/scanurl", { nextUrl: url },
       function(data) 
       {
         updateView(data);

         if(data.nextUrl != null)
             scanUrl(data.nextUrl);
         else
             finalize();
       });
    }

1 个答案:

答案 0 :(得分:1)

您是否使用asymc请求传递了会话ID?如果我没有误解你并且你正在调用这样的东西:

$。AJAX({ 'url':'http:// something', ... })

您需要在以下位置添加“数据”部分:

sessionIdVariable =您的电流 - 会话id