2017-10-12 137 views
1

我有一個下面的問題:當我session_start()時,爲什麼在我的對象上調用__wakeup()?

我使用一個類與單例模式,我做了__wakeup()私人出於這個原因。該對象在任何時候都不會存儲在會話中。當我調用session_start(),我得到這個錯誤信息:

Warning: Invalid callback MySingletonClass::__wakeup, cannot access private method MySingletonClass::__wakeup() in Session.php on line 32 

線session.php文件的32讀:

30 public function startSession() { 
31  if (session_status() == PHP_SESSION_NONE) { 
32   session_start(); 
33  } 
34 } 

我明白,存儲在會話對象被序列化和反序列化,但MySingletonClass永遠不會存儲在會話中...實際上,$ _SESSION數組是空的。

我在想,也許我有時會將它存儲在會話中,並且它會坐在那裏,但即使我清除所有$ _SESSION數據,銷燬會話,刪除服務器上的會話文件,重新啓動Apache並開始新會話...

什麼是更奇怪的是,我使用幾個不同的類,使用完全相同的單身模式,有私人__wakeup(),他們從來沒有提出這個問題。它只是這一個。

這是怎麼回事?我的代碼是如此瘋狂的PHP弄糊塗了嗎?

[編輯] 我想通一些東西:

這個錯誤發生,如果session_start()被調用後,MySingletonClass已被定義(所以之後包含其定義的文件已被列入/所需的),但不若session_start()是在包含/需要任何其他文件之前,將其移至腳本執行的最初階段。

有沒有人有解釋嗎?之前有session_start()是好的我想,我會開始它,但我想知道這裏發生了什麼...

回答

0

我解決了這個問題 - 問題出在我的自動加載過程。我認爲。也許。

說實話,我不知道什麼是真的錯了,但在我報廢了我的自動加載類,並從頭開始重新寫的,錯誤信息消失,所以我認爲它是自動加載機是有過錯。

你的猜測和我一樣好。

相關問題