繁体   English   中英

PHP nusoap(Web服务)使类保持活动状态+ C#

[英]PHP nusoap (webservice) keep class alive + C#

我试图在各种功能中保持同一类的生命。 这与PHP完美配合,但是当我在C#中使用相同的功能时,它无法按预期工作。

我的index.php文件包含以下内容:

<?php 
    require_once('nusoap/lib/nusoap.php'); 
    require_once('libs/webservice.php');

    $web    = new webservice(); // this is a class

    function login($user_email, $user_password){
        global $web;
        return json_encode($web->login($user_email, $user_password));
    }

    function getClients(){
        global $web;
        return json_encode($web->getClients());
    }

    $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
    $server = new soap_server();
    $server->register("login");
    $server->register("getClients");
    $server->service($HTTP_RAW_POST_DATA);

?>

如果我添加,在$server->service($HTTP_RAW_POST_DATA); 以下PHP代码仅用于测试:

echo login("testing@hotmail.com", "testing"); // returns TRUE > which is correct
echo getClients(); // returns TRUE > which is correct

效果很好。 该类包含将在其他函数中使用的user_id 现在,类webservice具有以下内容:

class webservice{

    private $user;
    private $user_id;

    public function __construct(){
        require_once("../libs/user.php");
        $this->user     = new users();
    }

    public function login($email, $password){
        $results = $this->user->logIn($email, sha1($password));

        if($results['id'] == null){
            return json_encode(array("message" => false));
        }

        $this->user_id  = $results['id']; // holds the user id for further functions needs

        return json_encode(array("message" => true));
    }

    public function getClients(){
        if($this->user_id == null){
            return json_encode(array("message" => false));
        }

        return json_encode(array("message" => true));
    }
}
?>

就像我说的那样,在PHP中效果很好。 但是,当我在C#中使用此Web服务时,由于user_id等于null,所以无法从getclients()函数检索结果TRUE。 登录后不保存 user_id

WebReference.myWebservice webS = new WebReference.myWebservice();
public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
    JObject login = JObject.Parse(webS.login("testing@hotmail.com", "testing"));
    MessageBox.Show(login["message"].ToString()); // returns TRUE

    JObject clients = JObject.Parse(webS.getClients());
    MessageBox.Show(clients["message"].ToString()); // returns FALSE
}

我知道问题出在index.php页面上,但是如何实现我要寻找的东西?

每次调用Web服务时,脚本都会在php中创建class webservice的新实例。 这意味着您的$user_id将不保存上一个请求的用户ID。

您应该通过登录功能返回哈希(会话)和用户ID。 将哈希和用户标识存储在c#中。 之后,您的哈希和用户ID应该成为每个请求的一部分。 在您的webservice类中对其进行验证,然后返回用户请求的结果。

希望您能按照我的指示进行。

也许看看twitters rest服务api: https ://dev.twitter.com/docs/auth/application-only-auth

我喜欢他们的方式。 您发送身份验证请求,twitter返回一个称为Bearer的哈希。 之后,每个请求都包含一个带有承载值的Authorization标头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM