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

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

新規登録して質問してみよう
ただいま回答率
86.02%
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

受付中

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

ITmaroon
ITmaroon

総合スコア5

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スクリプトは「サーバサイドスクリプト」と呼ばれています。

3回答

0グッド

1クリップ

162閲覧

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

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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を共有することは可能ですが別ドメインとのことですので無理でしょう。

回答3

1

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

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

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

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

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

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

投稿2023/01/24 03:44

KazuhiroHatano

総合スコア7699

ITmaroon😍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

ITmaroon

2023/01/24 03:56

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

1

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

//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

総合スコア11523

KazuhiroHatano👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

ITmaroon

2023/01/23 09:42

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

0

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

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

投稿2023/01/23 04:03

yambejp

総合スコア109020

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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スクリプトは「サーバサイドスクリプト」と呼ばれています。