我正在使用CodeIgniter 3.x和数据库会话驱动程序,我想访问data
类型为BLOB
的cloumn。这是我的blob数据:
__ci_last_regenerate|i:1435420891;identity|s:13:"john@doe.com ";username|s:13:"johndoe";email|s:13:"john@doe.com ";user_id|s:1:"5";old_last_login|s:10:"1435412865";
我试过unserialize($string)
,但没有用!
unserialize():偏移0处的错误
如何访问blob数据元素?例如:$user['email']
答案 0 :(得分:1)
没有直接的方法来做到这一点......您可以使用session_decode(),但它要求您已经有一个活动会话,以便它可以将解码后的数据放入{{ 1}}。
但是,我必须告诉你,如果你想这样做 - 你做错了。您永远不应该访问其他用户的会话。如果有一些数据与会话相关联,并且对于拥有该会话的用户不明确,则应该在会话表中添加另一个字段并将其保存在那里。
答案 1 :(得分:0)
我在这里得到了解决方案
所以我使用了会话解码http://php.net/session_decode
session_decode('__ci_last_regenerate|i:1446535049;ci_UserID|s:1:"2";ci_UserName|s:24:"example@xyz.com";logged_in|b:1;');
因此会话解码在正常的php会话中存储了所有加密数据。
我可以使用以下方式访问:
echo $_SESSION['ci_UserID'];
答案 2 :(得分:0)
正如纳尔夫所说,没有简单的方法可以做到这一点。
ykay; s解决方案假定您正在使用当前内置的会话处理程序。该值可以由应用程序随时更改,并且不能保证PHP会保留此格式。
您的解决方案破坏了当前会话,并将其替换为存储的数据(但至少它将使用“当前”序列化方法)。
可以在运行时覆盖序列化函数和session_函数的读/写操作。只要您回读使用与用于解码的机制相同的机制编码的数据即可,但是对于长期存储数据或在无法保证PHP安装读取一致性的情况下使用,这是一种不好的方法。数据。
解决在用户会话之外读取会话数据的问题的正确方法是使用序列化/非序列化格式:
ini_set("session.serialize_handler", 'php_serialize');
然后使用unserialize()读取数据。