2012-11-26 60 views
3

我使用Zend的Session Zend_Auth的和會話命名空間以下列方式合併:Zend的會議,Zend_Session_SaveHandler_DbTable和異步請求

的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似乎很好,但t他的其他會話名稱空間似乎表現得很奇怪。

我使用了幾個異步請求(使用jQuery)。

-init(intializes陣列到會話)

$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(處理array)

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

然而,在調用循環頁面變量的某處似乎被重置(並因此爲空) 。

這工作在默認的會話行爲,但它開始失敗時,我設置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

你傳遞會話ID與你asymc的要求嗎?如果我沒有誤解,你在呼喚這樣的東西:

$阿賈克斯({ 'URL': 'HTTP://東西', ... })

你需要添加一個'數據'部分,你有:

sessionIdVariable =你當前會話ID

+0

當然這會在會話cookie? –

+0

所以你說如果我發佈一個名爲sessionIdVariable的變量與我當前的sessionID應用程序將拾取它嗎? PS。我用我的JS請求循環添加了一個代碼塊。 –