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

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

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

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

CORS

CORSとはCross-Origin Resource Sharingの頭文字をとったもので、ブラウザがオリジン以外のサーバからデータを取得するシステムのことです。

Q&A

解決済

1回答

1679閲覧

外部サーバーから画面遷移無しでPHPを呼び出しSESSIONを使用したい

KAGURA

総合スコア13

Cookie

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

CORS

CORSとはCross-Origin Resource Sharingの頭文字をとったもので、ブラウザがオリジン以外のサーバからデータを取得するシステムのことです。

0グッド

3クリップ

投稿2020/11/12 02:02

編集2020/11/12 03:01

やりたいこと

  1. Aサーバーのhoge.phpにて$_SESSION["name"]に乱数を保持し、Bサーバーのmoge.phpへ遷移
  2. Bサーバーのmoge.phpから<img src="Aサーバー/hoge2.php">というタグでAサーバーのhoge2.phpを呼び出す(画面遷移はBサーバーのmoge.phpまでとするため)
  3. Aサーバーのhoge2.phpが実行されると、事前に保持していた$_SESSION["name"]の値をDBにINSERTする。

※AサーバーとBサーバーはそれぞれ物理的に異なるサーバーで、別ドメインで運用しています。
※セッションの有効期限はデフォルト24分となっていますが、全工程は20秒もかからず終わるので期限切れでセッションが無くなったわけではないと思われます。

※AサーバーはHTTPS、BサーバーはHTTPとなります。
※テストに使用したブラウザはGoogle Chromeです。(Firefoxで試した結果意図した動きとなり$_SESSION["name"]の値を取得することが出来ました。)

現状

Aサーバーのmoge2.phpをimgタグで呼び出した際、$_SESSION["name"]が空になっている。

クロスドメイン、CORS辺りが影響してると考え調べて出てきたヘッダー設定(後述)をいくつか試してみましたが
どれも状況変わらず。

※Aサーバーのhoge2.phpに追記してみたが特に挙動が変わらなかった設定

PHP

1header('Access-Control-Allow-Origin: *') 2header('Access-Control-Allow-Headers: *') 3header('Set-Cookie: cross-site-cookie=name; SameSite=None; Secure')

PHPフレームワークは使用していません、Aサーバーではnginxを使用しており
特殊な設定は何もしていないので、色々と設定が足りていないような気はしています。

知りたいこと

  • Aサーバー側だけの施策で「やりたいこと」を実現可能か否か
  • 実現可能な場合、具体的に何をすれば良いのか

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

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

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

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

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

ockeghem

2020/11/12 02:17

2点確認させてください。 (1)サーバー A, BはどちらもHTTPSですか? (2)テストに使ったブラウザは何でしょうか? Google ChromeとFilrefoxで結果に違いはありますか?
KAGURA

2020/11/12 03:01

2点、追記させて頂きました。 ご確認頂ければ幸いです。
guest

回答1

0

ベストアンサー

セッションIDのクッキーにsamesite=None; secureの属性をつける必要があります。これはPHP7.3以降では以下のように記述できます。

PHP

1session_set_cookie_params([ 2 'path' => '/', 3 'secure' => $secure, 4 'samesite' => $samesite 5]);

PHP 7.3より前のPHPですと、当該機能がありませんが、以下の「裏技」で設定が可能です。

PHP

1session_set_cookie_params(0, '/; samesite=None', NULL, TRUE, TRUE);

あるいは、php.iniに以下を設定することでも可能です。

; 各バージョン共通 session.cookie_secure = 1 ; PHP 7.2以前 session.cookie_path = '/; samesite=none' ; PHP 7.3以降 session.cookie_samesite = 'none'

投稿2020/11/12 03:58

ockeghem

総合スコア11701

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

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

KAGURA

2020/11/12 04:19

「裏技」の記述を、Aサーバーのhoge2.phpに記述したところ意図した動きになりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問