我试图在各种功能中保持同一个类的活着。这与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服务时,由于getclients()
等于null,我无法从user_id
函数检索结果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 页面上,但我该如何实现我正在寻找的内容?
答案 0 :(得分:0)
每次调用webservice时,脚本都会在php中创建一个class webservice
的新实例。这意味着您的$user_id
将不会保留上次请求的用户ID。
您应该通过登录功能返回哈希(会话)和用户标识。将哈希和用户标识存储在c#中。之后,您的哈希和用户ID应该是每个请求的一部分。在您的webservice类中验证它并返回用户请求的结果。
我希望你能按照我的指示行事。
也许看看twitters rest service api: https://dev.twitter.com/docs/auth/application-only-auth
我喜欢他们这样做的方式。您发送身份验证请求,Twitter返回称为bearer的哈希。之后,每个请求都包含一个带有承载值的Authorization标头。