2011-03-23 44 views
1

我一直在考慮的努力一個Zend框架實例有太大的修改遺留代碼嫁給古董遺留代碼不好玩的任務。其中一部分是一個多頁表單,它接收一堆數據,驗證數據,處理數據,然後通過電子郵件發送給網站所有者。我的工作是將這些數據存入ZF,我可以將其自動處理成數據庫。我無法使用POST。我寧願避免使用自動提交表單,因爲我不認爲我應該使用Javascript。得到將是痛苦笨拙。如何讓Zend Framework消除現有會話?

我的希望是使用Session來獲取數據從現有形式的處理器,進入ZF。數據已經在表單處理器的Session中。起初,我認爲這將是一個簡單的問題,重定向到我的ZF實例(它存在於主網站的子目錄中)。這是同一個域名,應該是同一個會話,對吧?

好,東西長約ZF處理其會議的方式使舊的會話數據是完全徹底殲滅。它剛剛消失。

因此,沒有ZF處理它的Session,它抹了現有會話或者這是一個僥倖的這樣一種方式?如果這不是僥倖,我怎麼能繞過它?如果是這樣,可能會導致它/我該如何解決它?

編輯

我使用Zend_Session_SaveHandler_DbTable數據庫備份會話。這在application.ini初始化。這裏是初始化代碼:

resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable" 
resources.session.saveHandler.options.name = "Sessions" 
resources.session.saveHandler.options.primary = "sessionID" 
resources.session.saveHandler.options.modifiedColumn = "lastModifiedTime" 
resources.session.saveHandler.options.dataColumn = "data" 
resources.session.saveHandler.options.lifetimeColumn = "lifetime" 

當我使用的會話,我已經打過電話session_start(),而是創建了一個錯誤。可能是因爲保存處理程序代碼已經初始化了會話,或者稍後會這樣做。如果我試圖直接訪問$_SESSION變量,那麼可以指示我試圖訪問未設置的變量。如果我先創建一個Zend_Session_Namespace,然後嘗試訪問$_SESSION,那麼我將面臨空白會話。

+3

不一定是相同的會話沒有。這取決於你如何使用Zend_Session。你在使用命名空間(Zend_Session_Namespace)嗎?自定義或自動生成的ID?這將有助於看到一些代碼。 – netcoder 2011-03-23 20:47:58

+0

如果你可以檢查,數據只是從ZF應用程序不可見或是從兩者中刪除? – Phil 2011-03-23 21:38:51

+0

@netcoder被編輯爲按要求添加更多信息。 – 2011-03-24 14:04:28

回答

1

因爲你有ZF設置保存會話的數據庫,而不是文件系統,具有不使用相同的ZF引導代碼嘗試調用會話將失敗的腳本。 (即使這樣,他們也可以使用兩種完全不同的會話cookie的名字......)

因爲你已經暗示ZF位,那麼解決方法很簡單:停止使用ZF的會話位目前。這意味着沒有數據庫表保存,沒有名稱空間處理程序,沒有。使用超全局的原始$_SESSION,並使用與舊版代碼相同的會話設置。這是爲了確保這兩個應用程序可以訪問相同的會話數據的唯一方法沒有修改遺留代碼。