SOAP拡張機能を使用してPHPでステートフルWebサービスを実装しようとしています。(はい、Webサービスはステートレスであると想定されていることを知っています。私が本当に気にかけているのは、何らかの形式のセッションIDだけなので、サービスを呼び出すたびに認証する必要はありません)。PHP.netのAPIドキュメントにはこれがいくらか欠けており、他に多くのことが書かれていません。
それについて説明しているページ(http://bytes.com/forum/thread160816.html)を見つけ、テストとしてコードを実装しました。Webサービスを使用し、各関数を呼び出して結果を表示する小さな.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()に割り当てた値ではなく、常に初期化された値を取得します。私が述べたように、私はデータベースに対して認証した後、セッションIDを永続化しようとしています-誰かがこれを行うためのより良い方法を持っているなら、私は提案を受け入れます。しかし、私はまだ一般的なケースを解決したいと思います。誰かアイデアはありますか?