欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP 与 NodeJS 如何共用 Session?

程序员文章站 2024-01-19 17:16:28
...

回复内容:

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

PHP暴露一个Service,向Node提供Session数据
php_session.php?SID=xxxx

function getSessionByID($SID) {
    if (session_id()) {
      // 关闭当前session
      session_destroy();
    }
    // 初始化指定session
    session_id($SID);
    session_start();
    // 返回操作接口更友好的JSON
    // 必要的FLAG看这里 http://www.php.net/manual/en/json.constants.php
    return json_encode($_SESSION);
  }

  header('Content-Type:application/json');
  echo getSessionByID($_GET['SID']); 
?>

node

var request = require('request');
request('http://localhost/php_session.php?SID=xxxx', function(err, res, body) {
  if (!err && res.statusCode == 200) {
    // 根据需要使用body(json)
  }
});
可以使用第三方的缓存工具,比如 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等成熟的方案都是可行的。PHP 与 NodeJS 如何共用 Session?

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频