0

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' => array( 'autoStart' => true, 'timeout' => 1440, 'cookieMode' => 'allow', ),

4

2 に答える 2

0

SOAP リクエストはステートレスであるため、各リクエストは Cookie を使用せずに処理され、PHP はデフォルトで、新しいセッションを開始するときに常に新しい Cookie を作成します。複数のクライアント リクエストにわたって SoapServer 側で同じセッションを使用する場合は、次の 2 つを設定する必要があります。

  • 最初に、要求サーバーから (SoapClient 経由で) 常に同じセッション Cookie を送信するようにします。これは __setCookie() によって行われます。

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

  • 2 番目- 上記のとおり - soapserver の永続性を設定します。

    $soapServer->setPersistence(SOAP_PERSISTENCE_SESSION);

于 2013-10-09T18:02:02.387 に答える