[英]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.