專家,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
}
會話ID如何存儲?您最近是否禁用了Cookie?在承擔服務器問題之前,這是否發生在其他瀏覽器/ PC上? – Basic 2011-04-26 03:01:33
是的,這發生在每個人和任何地方。我沒有使用cookies,正如你所看到的,通過調用這個方法將數據寫入會話$ auth-> getStorage() - > write($ data); – ronanray 2011-04-26 03:59:01
在這種情況下,我同意它聽起來像一個服務器問題。我的意思是關於Ids的意思是:第一次訪問服務器時,會話服務器端存儲了一些內容,客戶端會獲得一個唯一的Id aka會話ID。他第二次連接服務器時,客戶端會發送會話Id以及請求,服務器使用它來查找我之前存儲的會話變量。檢查你的客戶是否被髮送會話ID(通常作爲cookie) – Basic 2011-04-26 10:06:59