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

时间:2016-01-29 14:16:59

标签: php mysql var

我有一个小组,我将使用其他论坛的会话数据为其授予权限。基本上,当用户登录我们的论坛并在论坛上创建会话和信任时,他们可以单击面板,面板将检查他们的浏览器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位于第二列中所有废话的中间。所以你可以看到我在哪里挑出定义,我想要做的就是分配" 20"在" user_id; i:"变量并丢弃其余部分。我确信这是完成的,但在这一点上,我认为我只是把它弄出来并旋转轮子。我正在考虑爆炸,但数据的结构似乎不是一种选择。

1 个答案:

答案 0 :(得分:0)

该数据只是PHP serialize()调用的结果。您可以将其传递给unserialize(),它将为您提供包含值的数组。

<?php

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

$arr = unserialize($str);

var_dump($arr['user_id']);

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