javascript - 提取序列化的用户 session 数据

标签 javascript mysql node.js symfony-1.4

我有一个 symfony 1.4 应用程序,我刚刚将其更改为将 session 数据保存在 mysql 数据库的 session 表中。

下面是序列化 mysql 表 session_data 字段的示例。

symfony/user/sfUser/lastRequest|i:1447469750;
symfony/user/sfUser/authenticated|b:1;
symfony/user/sfUser/credentials|a:0:{}
symfony/user/sfUser/attributes|a:2:
{s:30:"symfony/user/sfUser/attributes";
a:3:{s:12:"current_page";
s:6:"splash";s:15:"logged_in_token";
s:31:"e9psz6e3iko4scsk0c4k4wckwk4k0k4";
s:25:"available_credits_session";
i:0;}s:19:"sfGuardSecurityUser";
a:1:{s:7:"user_id";s:1:"1";}}
symfony/user/sfUser/culture|s:2:"en";

我想从这个序列化数据中提取两条信息。

1)我正在使用的logging_in_token ID,因此用户的真实用户ID不会暴露。

2) user_id,即实际用户 ID。

我需要此信息的原因是应用程序要求一次只能有一个事件 session 。

因此,如果 session 表中有两个相同的用户 ID,我将使用此信息注销或使上一个 session 超时。

这似乎是序列化数据的特定“symfony 方式”。

任何有关如何在 Node 或 JavaScript 中提取此信息的想法将不胜感激

最佳答案

此数据的序列化方式并非特定于 symfony,而是特定于 php。根据 php.ini 中的 session.serialize_handler 设置,php 以不同的方式序列化 session 数据。该设置的默认值只是 php ,它似乎在您的情况下使用。

我在 php 中使用以下方法来转义此编码 - 它输出带有数据的常规数组。这里没有任何 php 特定内容,因此您可以轻松地将其移植到 javascript: (但是最好的解决方案是在将此数据保存到数据库之前执行“转义”,然后您不需要在 JavaScript 端执行此操作)

function unserializePhp($sessionData)
{
    $returnData = array();
    $offset = 0;
    while ($offset < strlen($sessionData)) {
        if (!strstr(substr($sessionData, $offset), '|')) {
            throw new Exception('invalid data, remaining: ' . substr($sessionData, $offset));
        }
        $pos = strpos($sessionData, '|', $offset);
        $num = $pos - $offset;
        $varname = substr($sessionData, $offset, $num);
        $offset += $num + 1;
        $data = unserialize(substr($sessionData, $offset));
        $returnData[$varname] = $data;
        $offset += strlen(serialize($data));
    }

    return $returnData;
}

关于javascript - 提取序列化的用户 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33706486/

相关文章:

javascript - 需要JS,通过CDN加载库失败

javascript - 交换 javascript 数组中的多个图像

javascript - 在 Angular 2 中实现 Wikitude

mysql - 在一个查询中从同一列中选择两个不同的字段,

javascript - 如何链接 Sequelize model.create() promise 以便它们按顺序执行?

node.js - 在 mongodb 数组中查找嵌套字段

javascript - 接受正数和负数的正则表达式

php - mysql_connect - 连接到 ISP 而不是远程主机

PHP/MYSQL - Insert into ignore,忽略指定列

http - 如何在 node.js 中使用 HTTP keep-alive 发送连续请求?