Web Servis istekleri arasında durumunu tutmaz

0 Cevap php

Bir ASP.NET Web Service geliştiriyorum:

# MyWS.cs
[WebMethod(EnableSession = true)]
public bool TryLogin(string user, string pass)
{
    if (/* user validation is successful*/)
    {
        Context.Session["user"] = user;
        return true;
    }
    else
    {
        Context.Session.Abandon();
        return false;
    }
}
[WebMethod(EnableSession = true)]
public string RetrieveSomething()
{
    if (Context.Session["user"] == null)
        throw Exception("User hasn't logged in.");
    /* retrieve something */;
}

Bu ASP.NET Ben de geliştiriyorum bir PHP Web sitesi tarafından tüketilmesi gerekmektedir:

# ws_client.php
function get_soap_client()
{
    if (!isset($_SESSION['client']))
        $_SESSION['client'] = new SoapClient('MyWS.asmx?WSDL');
    return $_SESSION['client'];
}
function try_login($user, $pass)
{
    return get_soap_client()->TryLogin(
        array('user' => $user, 'pass' => $pass))
        ->TryLoginResult;
}
function retrieve_something()
{
    return get_soap_client()->RetrieveSomething(
        array())->RetrieveSomethingResult;
}

# index.html
<?php
    if (isset($_POST['submit']))
    {
        session_start();
        require_once('ws_client.php');
        if (try_login($_POST['user'],
                      $_POST['pass']))
        {
            session_write_close();
            header('Location: /main.php');
            exit();
        }
?>
<html> <!-- login form here >

# main.php
<?php
    session_start();
    require_once('ws_client.php');
    // Here I get the Exception "User hasn't logged in.", even though
    // the user has logged in and the web service has already been notified.
    echo htmlspecialchars(retrieve_something());
?>

Ya benim Web Service veya benim PHP sitesinde ya da yanlış olabilir?

0 Cevap