使用PHP的SoapClient保留请求之间的会话数据

时间:2011-01-11 14:15:34

标签: php web-services session

我开发了一个ASP.NET Web服务,可以对数据库执行查询。现在我正在开发一个PHP Web站点,该站点使用Web Service来处理需要访问数据库的任何内容。我编写了以下函数,它创建了一个新的SoapClient来使用Web服务:

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服务的方法,它确实有效。例如,这是我的网站的登录功能(其控制流不受状态影响):

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:

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

但是,我不知道在Context.Session检索到的SoapClient个对象发出的连续请求之间是否保留了Web服务的get_soap_client()数据。所以我有以下问题:

  1. Context.Session检索到的SoapClient对象发出的连续请求之间是否保留了Web服务的get_soap_client()数据?

  2. Web服务的Context.Session数据是否在我需要的动态检索的不同 SoapClient个对象的连续请求之间保留?

    < / LI>
  3. 如果上一个问题的答案是“否”,有没有办法将SoapClient的会话数据序列化为PHP状态变量?

1 个答案:

答案 0 :(得分:1)

啊,你的意思是发送SESSION ID。我想你需要手动调用__setCookie来设置一个带有SESSION ID的cookie到你的web服务。

http://php.net/manual/en/soapclient.setcookie.php