我想知道是否可以在两个请求之间保持 PHP 会话处于活动状态......
我使用Flurl 插件执行请求:
public const string ApiUrl = "http://localhost/z/api.php";
public static string MethodName()
{
using (FlurlClient client = new FlurlClient())
{
string res = client.HttpGet(string.Format("{0}?action={1}", ApiUrl, "captcha"), true);
//Some actions...
return client.HttpPost(ApiUrl, new { action = "resolve-captcha", input = r }, false);
}
}
public static string HttpPost(this FlurlClient client, string url, object data, bool keepalive = false)
{
return client.Request(url).PostUrlEncodedAsync(data).ReceiveString().GetAwaiter().GetResult();
}
public static string HttpGet(this FlurlClient client, string url, bool keepalive = false)
{
return client.Request(url).GetStringAsync().GetAwaiter().GetResult();
}
在 PHP 部分(API)中:
//if isset $_GET then switch action key...
case "captcha":
if (session_status() == PHP_SESSION_NONE)
session_start();
$_SESSION['phrase'] = "hello";
break;
//if isset $_POST then switch action key...
case "resolve-captcha":
$secret = @$_SESSION["phrase"];
if(session_status() == PHP_SESSION_NONE)
die("No session!");
else
$coreData["secret"] = $secret;
$input = @$_POST["input"];
$coreData["valid"] = $input === $secret;
break;
但由于某种原因,每次我执行下一步(发布)时,api 都会返回没有任何会话正在运行。
正如你在这里看到的:
我一直在阅读,所有答案都说相同,我必须使用 cookie,cookie 有什么用?存储服务器应该保留的秘密?我需要知道如何在同一个会话中执行两个请求,或者至少如果可能的话,因为我不想使用 MySQL(带有 ID 系统,即),我更喜欢让它变得简单。