2

専門家、

サーバーにセッションを保存できない 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
}
4

1 に答える 1

3

サーバーの /tmp フォルダーがいっぱいのようです。つまり、ファイルベースのセッションを使用している場合、セッションは常に空になります。確認できるか確認してください。

このスニペットは、マシン内のディスクがどれだけいっぱいかを示します。

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

このスニペットは、ファイルを使用しているかどうか、およびファイルが保存されている場所を確認します。

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

2 番目の ini_get に「値がない」場合は、デフォルトで /tmp になります

保存パスがホーム フォルダー内にある場合は、自分で消去できますが、保存パスが /tmp または他のシステム フォルダーにある場合は、ホスティング プロバイダーにアクセスする必要があります。

于 2011-04-28T04:17:05.530 に答える