【问题标题】:can node.js read php sessions for each user?node.js 可以为每个用户读取 php 会话吗?
【发布时间】:2021-11-10 20:44:29
【问题描述】:

嗨,

我有一个基于 php 的论坛,它使用 mysql 来存储凭据。当用户使用他们的用户名和密码登录时,php 将输入数据与数据库中的值进行比较,如果它们匹配,它将创建一个 php 会话。我想创建一个 node.js 应用程序,如果用户已经登录到提出问题的论坛上,则允许用户输入它,可以 nod.js 从 php 会话中读取数据以在前面显示正确的用户名申请结束?

现在我在我的 javascript 客户端文件上想出了这个解决方法:

const setUsername = (username) => {
    username = <?php echo $username; ?>;
    socket.emit('add user', username);
  } 

但是由于它的客户端,这将允许任何人更改他们这边的源代码并输入他们想要的名称,这是一个严重的安全问题。

谢谢。

【问题讨论】:

    标签: php node.js session


    【解决方案1】:

    您可以将 php 会话保存在数据库中(php 会话的默认位置是文件系统)请参阅session_set_save_handler() 函数了解更多详细信息。

    然后您可以使用适当的 DB 驱动程序从 nodejs 端轻松地从数据库中检索此会话(如果您使用 MySQL,那么这里是 mysql 的实现)

    【讨论】:

    • 但是node.js如何知道每个用户属于哪个会话
    • @CainNuke 每个会话都包含一个会话 ID,用户发送它时带有 HTTP 请求标头,例如 Cookie: PHPSESSID=enGHumY%2C-2De-F-TDzNHVmEASDAS;,因此您可以通过此会话 ID 识别用户(它将保存在您的数据库中好)
    • 但会有数百个会话存储在数据库中。 Node.js 需要知道 ID 才能将其拉出。 node.js 怎么知道那个 ID?
    • 您可以将其作为 HTTP 标头传递给 nodejs 应用程序,但您需要先将其作为自定义标头(如 X-SID: ${PHPSESSION_ID})放在客户端,然后在请求处理期间提取:app.get(' /', function(req, res) { console.log(req.headers) });
    • 听起来更像。我不希望用户能够编辑该信息。
    猜你喜欢
    • 2018-10-30
    • 2014-02-21
    • 1970-01-01
    • 2015-12-08
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多