質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

505閲覧

setcookieで記録されたはずのクッキーの在りかがわかりません

ITmaroon

総合スコア8

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2023/01/23 00:42

私は現在curlで情報を他のサイトにPOST送信して、送られたサイトでその送信を受信して、その内容をcookieに記録させようとしています。
具体的なコードは以下のとおりです。
【送信側】

//送信先 $url = 'https://******.jp/recieveinfo.php'; //送信データ $param = array( 'response' => '送信データ', ); //curl初期化 $ch = curl_init(); //送信データのセット curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); //送信先のセット curl_setopt($ch, CURLOPT_URL, $url); //curl実行 $response_json = curl_exec($ch); $result = json_decode($response_json); //curlを閉じる curl_close($ch);

【受信側】(recieveinfo.php)

$response=$_POST['response']; $flg=setcookie("cookie", $response, time() + 60 * 60 * 24 * 30,"/");

これで受信側であるrecieveinfo.phpにおいて変数$responseには送信した「送信データ」が受信されていますし、setcookie関数の戻り値である$flgにはtrueが返ります。
しかし、setcookie関数で指定した「cookie」というクッキーはどこに記録されているのかわかりません。

サイトは送信側も受信側もWordPressサイトです。
しかし、受信側のrecieveinfo.phpはページのテンプレートファイルにはなっていません。

私の期待としてはsetcookieの第3引数で"/"を指定しているのでrecieveinfo.phpと同一のフォルダにあるpage-***.phpというテンプレートファイルに紐づいたページを開けばクッキーが見えると思ったのですが、どうやらそうはいかないようです。

ちなみに、受信側の処理で

require_once('*****/wp-load.php'); update_option('response', $_POST['response']);

として、Wordpressのオプションにセットすることはできています。
しかし、できるだけサーバーには記録するのは避けて、クライアントのストレージであるクッキーに情報を渡したいのです。

どなたか、私のコードの問題点をご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tabuu

2023/01/24 02:50

送信元と送信先は別ドメインでしょうか? 別ドメインの場合、保存したcookieを参照したいドメインは送信元と送信先どちらでしょうか?
ITmaroon

2023/01/24 03:11

ご質問いただきありがとうございます。 送信元と送信先は別のドメインです。 保存したcookieを参照したいのは送信先(今回の場合は受信側であるrecieveinfo.php)です。
tabuu

2023/01/24 03:38 編集

cookieをブラウザに保存する為にはブラウザ側にレスポンスヘッダーを出力する必要があります。 つまりブラウザが直接recieveinfo.phpにアクセスする必要があります。 同一ドメインでしたら送信元が保存したcookieを共有することは可能ですが別ドメインとのことですので無理でしょう。
guest

回答3

0

なんかやろうとしてることにクッキーを使う意図がわからんのが正直なとこですが。

setcookie関数で指定した「cookie」というクッキーはどこに記録されているのかわかりません。

送信側のcurlに対するレスポンスのヘッダに記録されてます。
受信側のサーバーのどこかに記録されているわけじゃないです。
クッキーはリクエストの送信側が受信側のレスポンスヘッダから受け取って記録するものです。

私の期待としてはsetcookieの第3引数で"/"を指定しているのでrecieveinfo.phpと同一のフォルダにあるpage-***.phpというテンプレートファイルに紐づいたページを開けばクッキーが見えると思ったのですが

クッキーというのはリクエストを送信した側、受信側から返されて持つものです。
setcookieの第3引数は、どのURLの範囲でそのクッキーを使って欲しいかの指定であって保存場所の指定ではないです。

単にWordPressでリクエストに付与された値を時限付き記録したいなら
set_transientを使うのが良いと思います。

投稿2023/01/24 03:44

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ITmaroon

2023/01/24 03:56

ありがとうございます。全く勉強不足でした。cookieに対する理解が深まりました。
guest

0

クッキーはレスポンスヘッダの一部ですが、今のスクリプトはレスポンスボディのみを受け取っています。レスポンスヘッダも受け取るには、以下のように一行追加すればできます。返ってきたレスポンスをダンプして、料理の方法を考えてください。

//curl初期化 $ch = curl_init(); //送信データのセット curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); //送信先のセット curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, true); // ← この行を追加 //curl実行 $response = curl_exec($ch); // レスポンスヘッダとボディ(JSON)の両方が返る

以下のようにしたらどうでしょうか?

//curl初期化 $ch = curl_init(); //送信データのセット curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); //送信先のセット curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // ← この行を追加 //curl実行 $response_json = curl_exec($ch); $result = json_decode($response_json); //curlを閉じる curl_close($ch);

投稿2023/01/23 04:56

編集2023/01/23 13:09
ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ITmaroon

2023/01/23 09:42

大変参考になる情報をありがとうございました。 しかし、私の問題とはちょっと違っているようです。 つまり、curlで送信したものを受信側のrecieveinfo.phpで受けて、受信側のサイトのクッキーに記録したいのです。 curl_setopt($ch, CURLOPT_HEADER, true); を入れて試しましたが、送信側からヘッダー付きのデータが送られても受信側のクッキーには記録されていませんでした。 何とか良い方法はないでしょうか?
guest

0

質問の意図がわかりかねますが、クッキーが保存されているのはクライアント側です

ページにアクセスする際、まず要求ヘッダでサーバーにクッキーを渡し、
サーバーで処理後、必要に応じてサーバーから応答ヘッダーでクッキーが返ってきます
クライアントは受け取ったクッキーを生存期間保持しており、
再度サーバーにアクセスするときに要求ヘッダでクッキーをサーバーに渡すというループです

投稿2023/01/23 04:03

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問