2011-04-26 38 views
2

專家,Zend_Auth的getidentity總是返回null

我剛剛發現Zend_Auth的一個怪異的行爲,從而它不能存儲在服務器會話。這種情況突然發生在我所有使用Zend_Auth進行認證的現有應用程序上,所以我確信它不會出現代碼問題。基本上,每當用戶成功通過身份驗證(他的用戶對象存儲到會話中)並重定向到登錄頁面後,用戶對象始終爲NULL。我使用Zend_Auth :: getInstance() - > getIdentity()從會話檢索用戶對象,它總是NULL。這種奇怪的行爲只發生在現場服務器,一切正常,在我的機器和登臺服務器。我只是想確保它只是服務器試圖在這裏搞笑,因爲我一直在檢查代碼並仍然無能爲力。這是一個共享服務器,我沒有太多的權限。

這裏是我的代碼:


// setup Zend_Auth adapter for a database table 
Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable'); 
$db = Zend_Registry::get('db'); 
$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'Users', 'Email', 'Password', 'MD5(?) AND Active=1'); 
$authAdapter->setIdentity($email) 
      ->setCredential($password); 

// do the authentication 
$auth = Zend_Auth::getInstance(); 
$result = $authAdapter->authenticate(); 

if ($result->isValid()) { 
    // success : store database row to auth's storage system 
    // (not the password though!) 
    $userData = array('UID','Email','Username','FirstName','LastName','Email','School'); 
    $data = $authAdapter->getResultRowObject($userData, 'Password'); 
    $auth->getStorage()->write($data); 

    $userData = get_object_vars($auth->getIdentity()); 
    if (!empty($userData)) { 
     // redirect here 
    } else { 
     // show invalid 
    } 
} else { 
     // show invalid 
} 
+0

會話ID如何存儲?您最近是否禁用了Cookie?在承擔服務器問題之前,這是否發生在其他瀏覽器/ PC上? – Basic 2011-04-26 03:01:33

+0

是的,這發生在每個人和任何地方。我沒有使用cookies,正如你所看到的,通過調用這個方法將數據寫入會話$ auth-> getStorage() - > write($ data); – ronanray 2011-04-26 03:59:01

+0

在這種情況下,我同意它聽起來像一個服務器問題。我的意思是關於Ids的意思是:第一次訪問服務器時,會話服務器端存儲了一些內容,客戶端會獲得一個唯一的Id aka會話ID。他第二次連接服務器時,客戶端會發送會話Id以及請求,服務器使用它來查找我之前存儲的會話變量。檢查你的客戶是否被髮送會話ID(通常作爲cookie) – Basic 2011-04-26 10:06:59

回答

3

這聽起來像您的服務器上的/ tmp文件夾已滿的意思是,如果你使用基於文件的會話,會話將永遠是空的。看看你能否確認它。

這個片段會告訴你如何磁盤滿是機器:

echo `df -h`."\n"; 

這個片段將確認,如果你正在使用的文件和它們的存儲位置。

echo ini_get('session.save_handler')."\n"; 
echo ini_get('session.save_path')."\n"; 

如果第二ini_get有「沒有價值」,那麼它會默認到/ tmp

如果保存路徑爲您的家庭文件夾中,然後就可以清除了自己,但如果保存路徑在/ tmp或其他系統文件夾中,您需要進入您的託管服務提供商。

+0

當磁盤已滿時,您的會話ID不會每次都改變,但您會一直有空會話。 – Lucas 2011-04-28 04:18:37

+0

會話存儲在/ var/php/session中,我無權訪問它。是的,我可以確認這是服務器的問題,因爲我昨天稱之爲託管服務提供商,他們設法清除它。現在,一切工作順利... thx的建議!乾杯! – ronanray 2011-04-29 05:09:09