php - 在 Node.js 中使用 PHP session (存储在 mySql 中)

标签 php mysql node.js session

我正在尝试在 node.js 中使用事件 session (在 php 中启动)

对于 PHP,我将 session 存储在 mysql 中(通过使用 session_set_save_handler,如 http://phpsecurity.org/code/ch08-2 中所述)。适用于 PHP。

现在计划:

1) 从 php 应用程序的客户端“执行”node.js 链接到 GET 中客户端的 PHPSESSID cookie:

http://192.168.0.222:53077/?phpsession=02isg9kv8fbveqhmt1htcj6cc7

2) 在 node.js 服务器端获取 PHPSESSID,在 mysql session 表中查找它的值

3) 如果mysql中存在PHPSESSID值——读取mysql( session 表)中存储的用户id、名称和其他用户的数据

问题是 - 这是正确的方法吗?我认为我错了,至少从第 2 步开始是这样。在 Node.js 中使用存储在 mysql 中的 session 从 php 开始工作的正确方法是什么?

请尽量不要建议我将 session 存储在 memcached 或 redis 中,我选择了 mysql。

最佳答案

由于您是使用 session_set_save_handler 自己处理 session ,因此您可以选择以任何您想要的方式序列化数据。我建议使用 json_encode() 来与 nodejs 兼容。

PHP 将已序列化的数据作为字符串提供给您的保存处理程序,因此您需要对其进行 unserialize() 并使用 json_encode 重新序列化。在返回 PHP 之前,将您的 session blob 读取调整为 json_decode() 和 serialize()。

您的步骤 1、2 和 3 似乎是正确的。更详细的问题可以提供更好的答案。

我建议确保您的 SQL 表为 session 存储的几列。

  • “created_on”整数时间戳
  • “updated_on”整数时间戳
  • "long_term"small int,如果用户勾选了“记住我”之类的 类似的,这应该跳过正常的 session 垃圾收集
  • “ip_addr”可用于提醒用户潜在的 session 劫持。
  • "agent"可以是用户代理的 md5 或 sha1 总和,用于检测来自 不同的设备/浏览器

关于php - 在 Node.js 中使用 PHP session (存储在 mySql 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929509/

相关文章:

PHP注册表不保存

javascript - 异步 Redis 和 Promise

php - 如何减少代码重复

mysql - Rails 无法在数据库中找到记录(但实际存在)

php - MySQL InnoDB AUTO_INCREMENT 辅助列

mysql - 如何在mysql中导出多表?

node.js - 如何使用 Node.js 从 AWS CloudFront 连接到 AWS ElastiCache 集群?

mysql - Node.js MySql 查询返回未定义的行对象

php - Nette Framework - 自定义属性宏

php - 如何创建插入表,其中部分数据来自一张表,其余数据已填充