返信内容:
問題の説明はなく、どのような方法を試したのかわかりませんが、あなたのシナリオは「ノードがphpセッションをどのように読み取るか」というものであり、これが最も一般的な状況であると推測することしかできません。
PHP はサービスを公開し、セッション データをノードに提供します
<code class="language-php"><span class="x">php_session.php?SID=xxxx</span>
<span class="cp"><?php</span>
<span class="k">function</span> <span class="nf">getSessionByID</span><span class="p">(</span><span class="nv">$SID</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">session_id</span><span class="p">())</span> <span class="p">{</span>
<span class="c1">// 关闭当前session</span>
<span class="nb">session_destroy</span><span class="p">();</span>
<span class="p">}</span>
<span class="c1">// 初始化指定session</span>
<span class="nb">session_id</span><span class="p">(</span><span class="nv">$SID</span><span class="p">);</span>
<span class="nb">session_start</span><span class="p">();</span>
<span class="c1">// 返回操作接口更友好的JSON</span>
<span class="c1">// 必要的FLAG看这里 http://www.php.net/manual/en/json.constants.php</span>
<span class="k">return</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$_SESSION</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">header</span><span class="p">(</span><span class="s1">'Content-Type:application/json'</span><span class="p">);</span>
<span class="k">echo</span> <span class="nx">getSessionByID</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">'SID'</span><span class="p">]);</span>
<span class="cp">?></span><span class="x"></span>
<span class="x">node</span>
<span class="x">var request = require('request');</span>
<span class="x">request('http://localhost/php_session.php?SID=xxxx', function(err, res, body) {</span>
<span class="x"> if (!err && res.statusCode == 200) {</span>
<span class="x"> // 根据需要使用body(json)</span>
<span class="x"> }</span>
<span class="x">});</span>
</code>
ログイン後にコピー
memcached などのサードパーティのキャッシュ ツールを使用できます。
この記事を参照してください: memcache を使用した PHP と Node.JS セッションの共有
Redis などのサードパーティのストレージを使用してセッションを保存します。
セッションはサーバー側で操作した方が良いでしょう。
Cookie の使用を選択し、Cookie の有効期限を 0 に設定して、ブラウザを閉じたときに期限切れにすることができます。生存効果はセッションの効果と似ており、フロントエンド操作の方がはるかに便利です。
Note.js はサーバー側で実行されますか? PHP と並行して実行する場合は、memcache、redis、データベースなどのサードパーティの共有セッションを検討できます。
ノードと PHP プログラムだけでセッションを共有できるだけでなく、PHP とノード プログラムに追加のオーバーヘッドが発生しないように、セッションには redis または memcached を使用することをお勧めします。
セッションがノードまたは PHP プログラムのメモリに配置される場合、第一に追加のコードとリソースのメンテナンスが必要になります。第二に、これらのコードは Redis や他の k-v データベース ソリューションほど成熟していないことがよくあります。 (合理的なコードでない場合) は、バグやパフォーマンスのボトルネックが発生しやすい場所です。たとえば、上記の PHP サービスを公開する方法、またはノード サービスを公開する方法では、コードの作成と保守に必要な労力のオーバーヘッドは言うまでもなく、1 秒あたりのオンライン リクエストの処理能力は一般的に PHP
PHP については、まだ学習していません。複数のマシンをサポートしたい場合、水平方向の拡張には、redis と同様のソリューションが必要です
このソリューションの欠点は、一般的なデータのみを保存でき、オブジェクト参照などは保存できないことです。
端的に言えば、共有とは何でしょうか?同じデータを PHP と Node.js で読み取ることができます。
それを読み取る方法については、データベースや Memcache に置くことも、PHP 経由で直接 Node.js へのインターフェイスを残すこともできます (flamingtop が提供する方法と同様)。
セッションの目的はサーバーのメモリにデータを保存することです。これを知っていれば、メモリ内データベース (redis、memcached など) を見つけるだけで目的を達成できます。これらが重すぎると思われる場合は、気軽に使用してください。使い慣れた言語で軽量のインメモリ データベースを作成するだけです。言語間のインターフェイスやプロセス間通信には .sock ファイルを使用することをお勧めします。
Redis が推奨されます。PHP はセッション ソリューションを直接設定できます。nodejs にも多くのライブラリがあります
一般的なアプローチはセッション サーバーを使用することですが、mysql や memcache などの成熟したソリューションを使用することも可能です。