2016-06-16 5 views
1

私はServiceSite.com(SS)と複数のGameSite.comを持っています。すべてのゲームはSSを通じて認証され、個人のデータベースでログインします。これはすべてシンプルなJSON APIで行います.SSにログインしてゲームに入る必要はありません。リモートサーバから別のリモートサーバにPHPセッションを作成するにはどうすればよいですか?

私はゲームにログインし、すべてのゲームで共有されているプレイヤーの連絡先リストとプロフィールにアクセスするなど、ゲームを通してSSの機能にアクセスすることを目標にしています。 GameSite.com/playにいる間に、彼らはServiceSite.com/contactsへのリンクをヒットし、彼らがServiceSite.comからそれを開いているかのように応答します。私はJSON Webトークンを使って手動でSSにログインし、ServiceSite.comへの実際のログインをシミュレートします。

これは、同じドメイン上にある限り、機能します。意味、私はゲームを開発しているので、私はServiceSite.com/tempgameurlを使用し、ServiceSite.comへの呼び出しはセッションの確立と維持に問題はありません。しかし、ゲームが独自のドメインを取得したり、ローカルホストで作業していると、それ以降のリクエストでセッションを認識することができません。応答が必要な場合、私は常にJWTトークンを渡す必要があります。これは私がやっていることには適していません。目標は、ゲームをロードしてログインを作成するための「ポーク」SSで、プレーヤーがServiceSite.comにアクセスすると、彼らは手動でログインしてServiceSite.comのフロントページにログインしたかのようにセッションを持ちます。

簡単に言えば、最初のJWTリクエストを受けて、ServiceSite.comのセッションをGameSite.comから行うと、そのセッションが行われます。しかし、私は同じドメインから要求している場合にのみ実際にセッションを作るようです。セッションが正しく作成され、$ _SESSIONを埋め込むのがわかりますが、要求が非ServiceSite.com URLから発生した場合、そのデータは単に持続しません。

+2

Redisのような集中化されたセッションストアを使用できます –

答えて

1

セッションとCookieはドメインに依存するため、ブラウザのセキュリティ上の問題です。あなたはこれを欺くことはできません。

あなたは各ドメインのクッキーを設定する必要があります:

  1. は、ユーザーを認証し、JWTコードを発するしかし、あなたはそれが少し複雑であっても、試すことができる「トリック」があります共有ストレージ(データベースの可能性が高い)にキー=>値タイプのレコードを作成します。キーは一意でなければなりません。値はJWTコードでなければなりません。また、有効期限を20〜30秒に設定する必要があります。

  2. レスポンスHTMLでは、ブラウザで他のドメインのCookieを設定する必要があります。これは、これらのドメインでのみ実行できます。だからあなたのようなもので、それをだますする必要があります。

    setCookie.phpで

    <img src="http://anotherDomain/setCookie.php?key=keyFromSharedStorage" style="display:none;" />

  3. 、共有ストレージをチェックして、$ _GET [「キー」]に基づいてJWTを取得します。その後、そのJWTでクッキーを設定します。

JWTを直接渡すこともできますが、期限切れになるキーを渡すとセキュリティが強化されます。ドメインごとに画像を追加します。

クッキーの代わりに、各ドメインでセッションを作成できます。本当に同じ原理。

+0

これは私が本当に望むものではないようです。私はいつもJWTトークンを渡すことができましたが、私は複雑さを望んでいません。私が気になるのは、GameSite.comからpingしています。私はServiceSite.comで作成されたセッションで 'print_r()'をやっています。そうすれば、私が望むことを達成するための第二の要求ができるかどうか疑問に思う.SS.comへのリクエストをしてからSS.comでGameSite.comから得たリクエストと本質的に同じリクエストを送信する。 SS.comのドメインから発信されたものです。私はすぐに試してみる必要があります。 –

0

よく必要なデータとセッションをデータベース自体に保存してみてください。少量のデータとログのようです。

ゲームの後、データベースにセッションを保存し、あなたがいる場所からセッションを開きます。

関連する問題