Yii SOAP Web服务会话ID已重置

时间:2013-08-13 13:58:21

标签: php web-services session soap yii

我正在使用Yii构建SOAP Web服务,我正在尝试通过会话ID管理身份验证,但它会不断更改每个请求。
这是我写的代码:

class MessagingController extends CController {

    public function login($username, $password) {
        $user = User::model()->find('username=:username AND password=:password', array(':username' => $username, ':password' => $password));
       if($user) {
            $session = new Session();
            $session->id = Yii::app()->session->sessionID;
            $session->user = $user->id;
            $session->start = date('Y-m-d H:i:s',  time());
            $session->duration = $this->sessionDuration; //Session duration is 1hr.`

            return $session->save() ? 
              $this->generateResponse(0, 'Session initiated successfully.', array('SessionId' => $session->id, 'Timestamp' => $session->start, 'Duration' => $session->duration)) : generateResponse(-1, 'Server error. #S', null);
        }
    return $this->generateResponse(-1, 'Unknown User. #UU', null);
}

}

配置文件:
'session'=>阵列(             'autoStart'=>真正,             'timeout'=> 1440,             'cookieMode'=> '允许',         ),

2 个答案:

答案 0 :(得分:0)

我相信您必须在SoapServer中指定会话应该是持久的。

http://php.net/manual/en/soapserver.setpersistence.php

答案 1 :(得分:0)

由于soap请求是无状态的,因此每个请求都没有cookie,因此默认情况下,PHP在启动新会话时始终会创建新的cookie。如果要在多个客户端请求中在SoapServer端使用相同的会话,则应设置两件事:

  • 首先确保您始终从请求服务器(通过SoapClient)发送相同的会话cookie。这是由__setCookie()完成的:

    $ soapClient-> __ setCookie('PHPSESSID',$ _COOKIE ['PHPSESSID']);

  • second - 如上所述 - 设置soapserver持久性:

    $ soapServer-> setPersistence(SOAP_PERSISTENCE_SESSION);