Сохранение данных сеанса между запросами с использованием PHP SoapClient - PullRequest
1 голос
/ 11 января 2011

Я разработал веб-службу ASP.NET, которая выполняет запросы к базе данных.Сейчас я разрабатываю веб-сайт 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);
}

Я уже протестировал эту функцию как средство для перевода клиента в веб-службу без состояния ,и это работает.Например, это функция входа в систему моего веб-сайта (на поток управления которой не влияет состояние):

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 объектов, полученных с помощью get_soap_client().Поэтому у меня есть следующие вопросы:

  1. Сохраняются ли данные Context.Session веб-службы между последовательными запросами, сделанными из SoapClient объекта, полученного с помощью get_soap_client()?

  2. Сохраняются ли данные веб-службы Context.Session между последовательными запросами, сделанными из различных SoapClient объектов, извлекаемых на лету, когда они мне нужны?

  3. Если ответ на предыдущий вопрос «нет», есть ли способ сериализации данных сеанса SoapClient в переменную состояния PHP?

1 Ответ

1 голос
/ 11 января 2011

Ах, вы имеете в виду, посылает ли ID сессии.Я предполагаю, что вам нужно будет вызвать __setCookie вручную, чтобы установить cookie с идентификатором SESSION для вашего веб-сервиса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...