5

これは非常に簡単です。私は書きます

$auth->getStorage()->write($user);

そして、別のプロセスでこの $user をロードしたいのですが、できません。

$user = $auth->getIdentity();

空です。私はちょうど...それを設定しませんでしたか?うまくいかないのはなぜですか?ハーフ?

[2011 年 4 月 13 日編集]

これはほぼ2年前に尋ねられました。しかし、2010 年 7 月にこの質問を繰り返したところ、当時の私にはまったく理解できなかった素晴らしい回答が得られました。

リンク: Zend_Auth がストレージへの書き込みに失敗する

それ以来、Zend_Auth と同じストレージ エンジンを使用しながらすべての悪い点を回避しながら、すべてのプロジェクトで (場合によっては微調整を加えて) 使用する非常に優れた小さなクラスを作成しました。

<?php

class Qapacity_Helpers_Storage {

    public function save($name = 'default', $data) {

        $session = new Zend_Session_Namespace($name);
        $session->data = $data;

        return true;
    }

    public function load($name = 'default', $part = null) {

        $session = new Zend_Session_Namespace($name);

        if (!isset($session->data))
            return null;

        $data = $session->data;

        if ($part && isset($data[$part]))
            return $data[$part];

        return $data;
    }

    public function clear($name = 'default') {

        $session = new Zend_Session_Namespace($name);

        if (isset($session->data))
            unset($session->data);

        return true;
    }

}

?>
4

3 に答える 3

1

それはうまくいくはずです。

Auth getIdentity 関数の実装を次に示します。

/**
 * Returns the identity from storage or null if no identity is available
 *
 * @return mixed|null
 */
public function getIdentity()
{
    $storage = $this->getStorage();

    if ($storage->isEmpty()) {
        return null;
    }

    return $storage->read();
}

PHP セッション ストレージの書き込み関数と読み取り関数の実装を次に示します。

/**
 * Defined by Zend_Auth_Storage_Interface
 *
 * @return mixed
 */
public function read()
{
    return $this->_session->{$this->_member};
}

/**
 * Defined by Zend_Auth_Storage_Interface
 *
 * @param  mixed $contents
 * @return void
 */
public function write($contents)
{
    $this->_session->{$this->_member} = $contents;
}

Zend_Auth クラスの同じインスタンスをロードしていますか?

使っていますか

$auth = Zend_Auth::getInstance();

getIdentity メソッドの後に write メソッドを呼び出しているのではないでしょうか?

とにかく、前に言ったように、あなたがしていることはうまくいくはずです。

于 2009-10-19T21:33:38.963 に答える
0

したがって、ページのリロード時にセッションをフェッチできますが、リダイレクトする場合はそうではありませんか? 別のドメイン名にリダイレクトしていますか? 次に、Cookie の問題である可能性があり、session.cookie_domainini 変数を手動で設定する必要があります。

指定された CookiePHPSESSIDが適切に設定されているかどうか、およびすべてのページ要求でサーバーに送信されているかどうかを確認しますか? それは一定ですか、それともリクエストごとに変化しますか?

また、セッション データがディスクに正しく保存されているかどうかを確認することもできます。セッションは、ini 変数で定義されたディレクトリにありますsession.save_path。ファイルはPHPSESSIDそこに対応しており、意味のあるエントリが含まれていますか? 私の場合、それは含まれています

root@ip-10-226-50-144:~# less /var/lib/php5/sess_081fee38856c59a563cc320899f6021f 
foo_auth|a:1:{s:7:"storage";a:1:{s:9:"user_id";s:2:"77";}}
于 2009-10-21T14:06:20.433 に答える
0

追加:

register_shutdown_function('session_write_close');

前にindex.phpに:

$application->bootstrap()->run();
于 2014-08-01T10:37:41.667 に答える