2009-12-29 89 views
3

我有一個應用程序與多個區域和各種傳入鏈接。前提是,它的工作原理是,在app_controller中,我分解這些傳入鏈接並將它們設置在會話中。CakePHP刪除頁面之間的會話

所以我有一個巨大的beforeFilter()app_controller其捕獲這些並設置兩個變量在會話中。 Viewing.region和Search.engine,沒問題。

問題出現在會話似乎不是跨頁請求持續。因此,例如,要訪問/reviews/write(userReviews/add)應該有一個會話可用,當用戶到達該站點時設置該會話。雖然它似乎消失了!

這樣看來,除非$這個 - > PARAMSapp_controller並寫入會話變量明確地抓住了,它不會在其他網頁上。

到目前爲止,我嘗試過,在'cake'和'php'中存儲會話之間交換似乎都表現出相同的行爲。我使用'php'作爲默認值。我的Session.timeout是'120',Session.checkAgent是False和Security.level是'低'。所有這些都應該給框架足夠的寬容,讓會議有最大的空間!

我有點難以理解,爲什麼當新的頁面被請求時會話似乎被重新創建或空白。我已將requestAction()調用註釋掉,以確保不會混淆會話請求對象,這似乎沒有什麼差別。

任何幫助將是偉大的,因爲我不必重新編碼站點通過url中的參數傳遞所有各種變量,因爲這將吸引,它的工作之前,因此切換$ this - > Session->閱讀('Viewing.region')在我所有的代碼!

+1

你有什麼不規範的用會話存儲(例如數據庫),或者是你使用任何代理/負載均衡軟件?你是否能夠在PHP中正常使用會話(例如沒有Cake框架)?對我來說,聽起來你的Apache/PHP實例實際上並不是將會話寫入磁盤,並且在PHP進程釋放其內存分配時會丟失它們。 – 2009-12-29 17:21:39

+0

我沒有使用數據庫,但我嘗試在app/config/core中使用'cake'作爲會話處理程序,並且該文件已創建好,並且仍保留相同的php會話ID,所以我認爲它正在寫入會議可以。我不認爲有負載平衡,因爲它是一臺服務器,但我不太確定。 – 2009-12-30 10:17:24

+0

您是否可以使用傳統PHP方法跨請求讀/寫會話?例如,<?php session_start(); $ _SESSION ['貓'] ='狗'; ?> – 2009-12-30 16:08:02

回答

1

嘗試將/app/config/core.php文件中的安全設置設置爲中或低。這解決了我的一個會話問題。

+0

我已經將它設置爲低 – 2009-12-30 10:14:57

+0

你肯定不想設置安全性低的空白,可以不考慮通過開門只是解決了問題! – 2017-05-16 19:51:21

0

這樣看來,除非 $這個 - > params爲在 明確地抓住了app_controller和會話變量 寫的,它不會對其他 網頁上。

這聽起來像正確的行爲,除非你發佈頁面之間的數據。如果你想要的任何變量仍然存在,它應該既可以在模型中(在那裏將與該協會堅持)設置,或在函數傳遞,或者明確地使用會話組件在會話中設置:

$this->Session->write('Viewing.region'); 

(請參閱:http://book.cakephp.org/view/398/Methods

在相關說明中,我最成功地使用存儲在數據庫中的會話。從app/config運行文件並將其設置爲db。看看是否有幫助。

另外,爲會話工作做Cake核心測試嗎?

+0

我正在使用$ this-> Session->在app_controller中編寫會話,但是一旦它被寫入,我就會期望它在多個頁面中保持不變,而這看起來並沒有這樣做。 – 2009-12-30 10:15:39

+0

當您爲Cake Core運行會話單元測試時會發生什麼? 嘗試使用 debug($ this-> Session)將一個beforeRender放到你的app_controller; 注意: - 它應該總是說頂部的SessionComponent對象 - 觀察頁面之間的對象變量的值。您有時會看到其他未顯示的錯誤。 – stevenf 2009-12-30 20:27:22

1

我有解決方案或至少是爲我工作

您嘗試從控制器的評論寫的動作傳遞給控制器​​userReviews操作添加嗎???

檢查您的控制器userReviews必須結束白衣PHP標籤「?>」,並沒有更多的空間

所以如果你有成才這樣

line 
999 //more code lines 
1000 ?> 
1001 

會話失敗

你必須有此

line 
999 //more code lines 
1000 ?> 

對不起我的英語不好 洙你

+3

你也可以不用結尾的PHP標籤?>,這樣可以避免這種情況發生,並且完全合法(如果你經常在其他文件中包含文件,這是非常合理的)。問題出現了,因爲空間會導致內容在發送到腳本中的標頭(因此可能是cookie)之前發送到客戶端。如果使用cookie來減輕會話持久性,這隻會影響會話。 – defines 2010-03-30 21:07:14

0

也許它是this problem?從本質上講,如果用戶代理髮生變化,Cake的會話將會重置 我遇到了幾天前提到的這個非常棘手的問題,現在我找不到幫助我解決問題的鏈接。

另外:你使用數據庫或普通的PHP會話嗎?

0

我要去這裏走出去的肢體,而不能看看你的代碼,但可能沒有可能,你的「評論」控制器(或其他)都有自己的beforeFilter(),並且不調用它的父母的beforeFilter()明確嗎?

這已經燒傷了我之前...

0

我有這樣的問題。使用某個控制器設置的會話在另一個控制器中不可用。花了幾個小時後,我可以清楚這個問題。底部有一個空白的php標籤。在清除最後一行之後的行和空白之後?> 標記正常工作。

0

我在移動CakePHP站點時遇到了這個問題。我的問題是會話目錄不可寫入。您應該確保該文件夾的應用程序/ tmp和它的所有子文件夾(包括會話)的權限777

+0

我在localhost中有這個問題,而我的操作系統是widows XP,我認爲這個問題不是來自許可。 – aya 2012-09-29 11:29:28