1

2 つのリクエスト間で 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;

しかし、何らかの理由で、次のステップ (Post) を実行するたびに、API は実行中のセッションがないことを返します。

ここでわかるように:

...

私は読んでいますが、すべての答えは同じです。私は何のためにクッキーを使用しなければならないのですか? サーバーが保持する必要がある秘密を保存するには? 同じセッションで 2 つのリクエストを行う方法を知る必要があります。または、少なくともこれが可能である場合は、MySQL を使用したくないため (つまり、ID システムで)、簡単に保つことを好みます。

4

1 に答える 1