Zend framework Zend会话和Zend身份验证
我已经通过zend auth建立了一个登录系统,下面是代码Zend framework Zend会话和Zend身份验证,zend-framework,zend-auth,zend-session,Zend Framework,Zend Auth,Zend Session,我已经通过zend auth建立了一个登录系统,下面是代码 // userAuthentication public function authAction(){ $request = $this->getRequest(); $registry = Zend_Registry::getInstance(); $auth = Zend_Auth::getInstance(); $DB = $regi
// userAuthentication
public function authAction(){
$request = $this->getRequest();
$registry = Zend_Registry::getInstance();
$auth = Zend_Auth::getInstance();
$DB = $registry['DB'];
$authAdapter = new Zend_Auth_Adapter_DbTable($DB);
$authAdapter->setTableName('user')
->setIdentityColumn('user_name')
->setCredentialColumn('user_password');
$username = $request->getParam('username');
$password = $request->getParam('password');
$authAdapter->setIdentity($username);
$authAdapter->setCredential($password);
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
$this->_redirect('/login/controlpannel');
}else{
$this->_redirect('/login/login');
}
}
这项工作现在很好。用户(表)中有用户id(列),其中也有用户名和密码。我需要从这个表中获取特定的用户id,该表刚刚登录并将其放入会话中
$user_session = new Zend_Session_Namespace('user_session');
$user_session->username = $username;
$user_id->user_id = $user_id;
这样我就可以根据这个$user\u id查询一些信息,并将结果传递到视图(名称)控制面板从存储器获取用户id:
$userInfo = Zend_Auth::getInstance()->getStorage()->read();
echo $userInfo->user_id;
您可以按照Teez建议的方式访问数据,也可以从Zend_会话_名称空间中提取数据 15.1.3.1。PHP会话中的默认持久性
默认情况下,Zend_Auth提供来自成功会话的身份的持久性存储 尝试使用PHP会话进行身份验证。在成功的 身份验证尝试,Zend_Auth::authenticate()存储身份 从身份验证结果到持久性存储。除非 否则,Zend_Auth将使用名为 Zend_Auth_Storage_会话,它反过来使用Zend_会话。习俗 类可以通过提供实现 Zend_Auth_Storage_接口到Zend_Auth::setStorage() Zend_Auth_Storage_会话使用“Zend_Auth”的会话命名空间。 可以通过将不同的值传递给 Zend_Auth_Storage_会话的构造函数,该值在内部 传递给Zend_会话_命名空间的构造函数。这应该 在尝试身份验证之前发生,因为 Zend_Auth::authenticate()执行 身份
虽然已经回答了这个问题,但我倾向于使用
getIdentity()
函数,而不是getStorage()->read()
链。下面的例子
// to check if authenticated
Zend_Auth::getInstance()->hasIdentity();
// to actually get the details from storage
Zend_Auth::getInstance()->getIdentity()->user_id;
// if I need to use the identity over and over
$identity = Zend_Auth::getInstance()->getIdentity();
$userId = $identity->user_id;
这是我的方法,效果很好: 1-i首先在引导中定义一个init函数
protected function _initSession()
{
$UserSession = new Zend_Session_Namespace('UserSession');
$UserSession->setExpirationSeconds(/* you may fix a limit */);
Zend_Registry::set('UserSession', $UserSession);
}
/*在登录操作中,在正确的用户名和密码之后*/
// Create session
$UserSession = Zend_Registry::get('UserSession');
// Get the user from database
$db = Zend_Db_Table::getDefaultAdapter();
$user = $db->fetchRow("SELECT * FROM user_table WHERE user_email = '".$user_email."'");
//then you assign to $user to $UserSession variable :
$UserSession->user = $user;
//finaly don't forget to unset session variable in the Logout action ...
将阵列分配给会话时,必须为创建的会话区域提供名称,即在执行getStorage之前必须先执行设置存储 您必须这样编写代码:
// userAuthentication
public function authAction(){
$request = $this->getRequest();
$registry = Zend_Registry::getInstance();
$auth = Zend_Auth::getInstance();
$DB = $registry['DB'];
$authAdapter = new Zend_Auth_Adapter_DbTable($DB);
$authAdapter->setTableName('user')
->setIdentityColumn('user_name')
->setCredentialColumn('user_password');
$username = $request->getParam('username');
$password = $request->getParam('password');
$authAdapter->setIdentity($username);
$authAdapter->setCredential($password);
$authAdapter->setStorage(new Zend_Auth_Storage_Session('User_Auth'));
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
$this->_redirect('/login/controlpannel');
}else{
$this->_redirect('/login/login');
}
}
然后,要获得存储价值,必须使用以下选项:
$x = new Zend_Auth_Storage_Session('User_Auth');
$y = $x->read();
你把所有的东西都作为一个对象放在$y里
享受吧 user=Zend_Auth::getInstance()->getIdentity();
如果(!@$this->user){
$objSession->errorMsg=“请先登录…”;
$this->_重定向('/user/login');
}
?>为什么要手动设置会话?登录后将创建会话,您可以从存储中获取该会话。@Teez如何从存储中获取用户id???$data=Zend\u Auth::getInstance()->getStorage()->read()$此->视图->用户名=$data->用户名$此->视图->id=$data->用户id;在进行此类查询之前,请记住清理/参数化用户电子邮件;)