【问题标题】:Yii SOAP Web Service Session ID is resetYii SOAP Web 服务会话 ID 被重置
【发布时间】:2013-08-13 13:58:20
【问题描述】:

我正在使用 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);
}

}

配置文件:
'会话' => 数组( '自动启动' => 真, '超时' => 1440, 'cookieMode' => '允许', ),

【问题讨论】:

    标签: php web-services session soap yii


    【解决方案1】:

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

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

    【讨论】:

    • 我不知道它在哪里 :( 我刚刚开始使用 Yii 和 SOAP。
    【解决方案2】:

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

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

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

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

      $soapServer->setPersistence(SOAP_PERSISTENCE_SESSION);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多