5

这很简单。我写的

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

然后我想在一个单独的进程中加载​​这个 $user,但我不能因为

$user = $auth->getIdentity();

是空的。我不是刚刚...设置它吗?为什么它不起作用?哈普?

[编辑 2011-04-13]

大约两年前就有人问过这个问题。但事实是,我在 2010 年 7 月重复了这个问题,得到了一个我当时根本无法理解的绝妙答案。

链接:Zend_Auth 无法写入存储

从那以后,我构建了一个非常好的 litte 类,我在所有项目中使用与 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

It's supposed to work.

Here's the implementation of the Auth getIdentity function.

/**
 * 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();
}

Here's the implementation of the PHP Session Storage write and read functions:

/**
 * 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;
}

Are you sure you are loading the same instance of the Zend_Auth class?

Are you using

$auth = Zend_Auth::getInstance();

Maybe you are calling the write method after the getIdentity method?

Anyway, as I said before, what you are doing should work.

于 2009-10-19T21:33:38.963 回答
0

因此,在页面重新加载时,您可以获取会话,而如果重定向则不能?您是否重定向到不同的域名?那么这可能是 Cookies 的问题,您需要手动设置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 回答