データベースへのクエリを実行するASP.NET Webサービスを開発しました。今、データベースにアクセスする必要のあるWebサービスを消費するPHP Webサイトを開発しています。 ステートレス Webサービスへのクライアントを取得する手段として、私はすでにこの機能をテストして、それが仕事をしPHPのSoapClientを使用してリクエスト間でセッションデータを保存する
function get_soap_client()
{
if (!file_exists('wsdl_path.txt')
return NULL;
if (!$file = fopen('wsdl_path.txt', 'r'))
return NULL;
$path = fgets($file);
fclose($file);
return new SoapClient($path);
}
:私は、Webサービスを消費するために新しいのSoapClientを作成し、以下の機能を書かれています。例えば、これは、(その制御フローの状態に影響されません)私のWebサイトのログイン機能である:
順番に、次のWebメソッドを呼び出しますfunction try_login($user, $pass)
{
$client = get_soap_client();
// ASP.NET Web Services encapsulate all inputs in a single object.
$param = new stdClass();
$param->user = $user;
$param->pass = $pass;
// Execute the WebMethod TryLogin and return its result.
// ASP.NET Web Services encapsulate all outputs in a single object.
return $client->TryLogin($param)->TryLoginResult;
}
:
[WebMethod(EnableSession = true)]
public bool TryLogin(string user, string pass)
{
SqlParameter[] pars = new SqlParameter[2];
pars[0] = new SqlParameter("@User", SqlDbType.VarChar, 20);
pars[0].Value = user;
pars[1] = new SqlParameter("@Pass", SqlDbType.VarChar, 20);
pars[1].Value = pass;
// The Stored Procedure returns a row if the user and password are OK.
// Otherwise, it returns an empty recordset.
DataTable dt = Utilities.RetrieveFromStoredProcedure('[dbo].[sp_TryLogin]', pars);
if (dt.Rows.Count == 0) // Wrong user and/or password
{
Context.Session.Abandon();
return false;
}
else
return true;
}
しかし、私は知りませんWebサービスのContext.Session
データが、SoapClient
オブジェクトからの連続した要求の間に保存されるかどうかは、get_soap_client()
によって取得されます。
は、Webサービスの
Context.Session
データは、get_soap_client()
によって取得SoapClient
物から作られた連続したリクエストの間で保存されている:だから私は、次のような質問がありますか?- は、Webサービスの
Context.Session
データは、私はそれらを必要として、その場で検索し異なるSoapClient
オブジェクトから作られた連続したリクエスト間で保持されていますか? 答えが「いいえ」の場合、
SoapClient
のセッションデータをPHP状態変数にシリアル化する方法はありますか?
あなたは現在$ _SESSIONのデータを意味していますか? – Stephen
いいえ、実際にはWebサービスの「Context.Session」データを意味しました。 PHPの '$ _SESSION'配列にできるだけ少ないデータを残したいと思います。 – pyon