PHP 将 var 设置为字符串的一部分

PHP setting var to only a portion of a string

我正在制作一个面板,它将使用来自另一个论坛的会话数据来授予它权限。基本上,当用户登录到我们的论坛并在论坛上创建会话和信任时,他们可以单击面板,面板将检查他们的浏览器 cookie 以获取会话 ID 和信任 ID。然后它获取该信任 ID 并检查论坛的数据库以查找与该信任关联的用户 ID。然后获取会话 ID 并验证它是否属于该用户 ID。问题是,当我获得会话 ID 时,关联的用户 ID 是我必须投射的 blob 的一部分,以便从字段中获取数据。所以我得到这样的结果:

('7c64c90413beb7d139c64ccc8b13380b', 
'a:12:{s:12:"sessionStart";i:1454075264;s:2:"ip";s:4:"b???";s:11:"sessionCsrf";s:16:"-2Yx13nBLdstUj4H";

s:7:"user_id";i:20;

s:13:"password_date";i:1453353041;s:16:"previousActivity";i:1454072099;s:13:"trophyChecked";b:1;s:16:"promotionChecked";b:1;s:16:"dismissedNotices";a:0:{}s:15:"lastNoticeReset";i:0;s:13:"canAdminUsers";b:1;s:20:"userModerationCounts";a:2:{s:5:"total";i:0;s:13:"lastBuildDate";i:1454075264;}}'),

我知道那里有很多,但我挑出了对我重要的部分。返回的第一列是会话 ID,我用它来验证用户 ID,但用户 ID 位于第二列所有废话的中间。所以你可以看到我在哪里挑出定义,我想要做的只是将 "user_id;i:" 之后的“20”分配给一个变量并丢弃其余部分。我确信这很简单,但在这一点上,我认为我只是将其淘汰并旋转轮子。我在想爆炸,但该数据的结构似乎不是一个选项。

该数据只是 PHP serialize() call. You can pass it to unserialize() 的结果,它将为您提供一个包含值的数组。

<?php

$str = 'a:12:{s:12:"sessionStart"…etc…etc…i:1454075264;}}';

$arr = unserialize($str);

var_dump($arr['user_id']);

如果您试图单独从 MySQL 中提取值,出于某种原因,我已经对包含大量嵌套 SUBSTR() 和 [=14 的可怕查询做了类似的事情=] 就在两周前。我不推荐它。特别是因为在我的例子中,我正在做一个一次性的报告查询,而你正试图用它进行身份验证。人们可能会尝试使用特制的 cookie 来绕过您的字符串提取并获得非法访问。