这很简单。我写了
$auth->getStorage()->write($user);
然后我想在一个单独的进程中加载这个$ user,但我不能因为
$user = $auth->getIdentity();
是空的。我不是只是......设定它?为什么不起作用? HALP?
[编辑2011-04-13]
大约两年前就已经提出这个问题了。但事实是,我在2010年7月重复了这个问题并得到了一个很棒的答案,我当时根本不明白。
链接:Zend_Auth fails to write to storage
我已经构建了一个非常好的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;
}
}
?>
答案 0 :(得分: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 Session Storage写入和读取功能的实现:
/**
* 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方法?
无论如何,正如我之前所说,你正在做的事情应该有用。
答案 1 :(得分:0)
因此,在页面重新加载时,您可以获取会话,而不是重定向?您是否在不同的域名上重定向?然后它可能是Cookie的问题,您需要手动设置session.cookie_domain
ini变量。
检查名为PHPSESSID
的cookie是否已正确设置,以及是否在每次页面请求时将其发送到服务器?它是不变的还是每次请求都会改变?
此外,您可能想要检查会话数据是否正确保存到磁盘。会话可以在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";}}
答案 2 :(得分:0)
添加:
register_shutdown_function('session_write_close');
到index.php之前:
$application->bootstrap()->run();