Heim > Backend-Entwicklung > PHP-Tutorial > PHP 与 NodeJS 如何共用 Session?

PHP 与 NodeJS 如何共用 Session?

WBOY
Freigeben: 2016-06-17 08:31:17
Original
1256 Leute haben es durchsucht

回复内容:

没有问题描述,也不知道你都尝试过哪些方法,只能假设你的场景是“node如何读取php session”,这应该是最常见的情况。

PHP暴露一个Service,向Node提供Session数据
<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>
</span></code>
Nach dem Login kopieren
可以使用第三方的缓存工具,比如 memcached。
参考这篇文章:PHP and Node.JS session share using memcache 使用一个第三方存储如redis来保存session。 session还是放在服务器端操作比较好。
可以选择使用cookie,将cookie的生存时间expire设置为0代表随浏览器关闭失效。生存效果和session差不多,前端操作就方便很多了。
note.js运行在服务端的啊?和php并行运行的话可以考虑第三方共享session了,memcache,redis,数据库也可以。 建议是使用redis 或者memcached 做 session,这样不仅node和php程序可以共享session,也不会对php、node程序造成额外的开销。

如果是session放在node或者php程序的内存中,一来需要额外的代码和资源维护,二来这些代码往往不及redis等k-v数据库的解决方案成熟,反而(如果不合理的代码的话)是容易引起bug或者性能瓶颈的地方。比如上面有人提及的暴露php service的方法,或者是暴露node service,不说编写、维护代码需要人力开销,线上每秒请求处理能力一般是 php
至于php, 我没了解过, 如果要支持多机, 水平扩展, 类似redis的方案还是需要的

这种方案缺点就是只能保存通用数据, 不能保存对象引用什么的. 说白了,什么叫共用?就是同一条数据,PHP能读,Node.js也能读。
至于怎么读就得看自己了,放数据库、Memcache、甚至你直接通过PHP留接口给Node.js(就像flamingtop提供的方法)。 session的目的是把数据存在服务器的内存里,如果清楚这点,那么找一个内存数据库(redis,memcached...)就能达到你的目的,如果你嫌这些都还太重量级,就随便用一个你熟悉的语言写一个轻量级的内存数据库就好,跨语言接口或者说是进程间通信推荐使用.sock文件。 推荐redis,php可以直接配置session方案,nodejs也有很多lib 一般的做法是使用session服务器,使用mysql或者memcache等成熟的方案都是可行的。
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage