2013-08-13 1 views
0

Я создаю веб-службу SOAP с Yii, и я пытаюсь управлять аутентификацией с помощью идентификатора сеанса, но он продолжает меняться при каждом запросе.
Это код, который я написал:Идентификатор сеанса веб-службы Yii SOAP сбрасывается

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); 
} 

}

Файл конфигурации:
'сессии' => массив ( 'AUTOSTART' => правда, 'тайм-аут' => 1440, 'cookieMode' => 'allow', ),

ответ

0

Поскольку запросы мыл являются лицами без гражданства, каждый запрос идет без печенья и как таковой PHP по умолчанию всегда будет создавать новые кук при запуске новой сессии. Если вы хотите использовать один и тот же сеанс на SoapServer стороны через несколько клиентских запросов, вы должны установить две вещи:

  • первого убедитесь, что вы всегда посылать те же кук сессии с вашего запрашивающим сервера (через SoapClient). Это делается __setCookie():

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

  • второй - как указано выше - установить SoapServer настойчивость:

    $ soapServer-> setPersistence (SOAP_PERSISTENCE_SESSION);