Я пытаюсь реализовать веб-сервис с отслеживанием состояния в PHP, используя расширение SOAP. (Да, я знаю, что веб-сервисы должны быть без сохранения состояния; все, что я действительно хочу сохранить - это какая-то форма идентификатора сеанса, поэтому мне не нужно проходить аутентификацию при каждом обращении к сервису). Документация по API в PHP.net в некоторой степени отсутствует по этому поводу, и больше ничего не написано.
Я нашел одну страницу, которая обсуждает это (http://bytes.com/forum/thread160816.html), и реализовал код в качестве теста. Я создал небольшое приложение .NET, которое использует веб-сервис, вызывает каждую функцию и отображает результат. Из того, что я ' прочитав, расширение PHP SOAP будет сохранять переменные класса между вызовами до тех пор, пока функциональность инкапсулирована в класс с помощью функции setClass () и функция setPersistence () передана SOAP_PERSISTENCE_SESSION.
Вот мой код:
<?php
class User
{
var $name = "Initial value";
function setName($name)
{
$this->name = $name;
// Tried this too.
// $this->name = "Set to string constant" ;
}
function getName()
{
// This always returns "Initial value"
return $this->name;
}
}
// Tried placing session_start() in several places
// before $server->handle()...
// One guy says this doesn't need to be called.
// I assume it depends on if session autostart is on.
session_start();
$server = new SoapServer(null, array('uri' => 'http://localhost/'));
$server->setClass('User');
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
?>
Проблема, с которой я сталкиваюсь, заключается в том, что $ name не сохраняется между вызовами - я всегда получаю инициализированное значение, а не значение, которое я назначаю setName (). Как я уже говорил, я пытаюсь сохранить идентификатор сеанса после аутентификации в базе данных - если у кого-то есть лучший способ сделать это, я открыт для предложений; Тем не менее, я все еще хотел бы решить общий случай. У кого-нибудь есть идеи?