【问题标题】:extract serialized user session data提取序列化的用户会话数据
【发布时间】:2015-11-14 08:19:43
【问题描述】:

我有一个 symfony 1.4 应用程序,我刚刚更改它以将会话数据保存在 mysql 数据库的会话表中。

这里是一个序列化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) 我正在使用的 logged_in_token id,因此不会暴露用户的真实用户 id。

2) user_id 是实际的用户ID。

我需要此信息的原因是申请要求是他们一次只能有一个活动会话。

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

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

任何关于如何在节点或 javascript 中提取此信息的想法将不胜感激

【问题讨论】:

    标签: javascript mysql node.js symfony-1.4


    【解决方案1】:

    这个数据的序列化方式不是symfony特有的,而是php特有的。根据php.ini 中的session.serialize_handler 设置,php 以不同的方式序列化会话数据。该设置的默认值只是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;
    }
    

    【讨论】:

    • 谢谢先生。我一直在努力弄清楚这件事很尴尬。我根据您的建议使用工作 symfony 代码进行了编辑。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 2020-03-15
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 2015-03-31
    相关资源
    最近更新 更多