休息和ZF会话管理

时间:2011-12-10 15:29:59

标签: authentication rest zend-framework

我正在尝试创建一个使用Zend框架的Web服务。 API基于REST,并使用Zend_Rest_Controller作为基类。我希望有用户管理和会话,为此我使用以下代码: 登录(POST)

// user id and password fetched first

$users = new Application_Model_DbTable_UserInfo();
$auth = Zend_Auth::getInstance();
$authAdapter = new Zend_Auth_Adapter_DbTable($users->getAdapter(),'users');
$authAdapter->setIdentityColumn('userid')
    ->setCredentialColumn('password');
$authAdapter->setIdentity($userid)
    ->setCredential($pwd);
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
    Zend_Session::rememberMe(604800);
    $storage = new Zend_Auth_Storage_Session();
    $usa = $authAdapter->getResultRowObject();
            $auth->getStorage()->write($usa);
    $authSession = new Zend_Session_Namespace('Zend_Auth');
    $authSession->setExpirationSeconds(60*60);            
}

并且在使用例如访问服务时一些GET方法我希望通过以下代码检查是否存在有效会话:

$auth = Zend_Auth::getInstance();       
if(!$auth->hasIdentity())
{
    // error handling etc.
}

我从未获得过身份,因此该服务无效。

我已严格遵循ZF身份验证的指导,但REST内容是否需要考虑其他项目?

1 个答案:

答案 0 :(得分:0)

我知道我没有回答你的问题,但是如果你真的计划实现一个真正的REST接口(这意味着它可以使你能够很好地扩展),你可能最好忘记会话并使用Zend_Auth你上面描述的方式。

看看这里,已经讨论过REST接口和身份验证的内容: Can you help me understand this? "Common REST Mistakes: Sessions are irrelevant"

简而言之,引用上面的Q / A线程,“要成为RESTful,每个HTTP请求应该自己携带足够的信息,以便其接收者处理它与HTTP的无状态特性完全协调”。我真的觉得借这个。