我正在使用CodeIgniter3.x和数据库会话驱动程序,并且我想访问BLOB
类型的data
块。这里是我的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']
没有直接的方法。。。您可以使用session_decode(),但它要求您已经有一个活动会话,以便它可以将解码的数据放入$_SESSION
中。
然而,我必须告诉你,如果你想那样做,那你就错了。您永远不应该访问其他用户的会话。如果有一些与会话相关的数据对拥有会话的用户来说并不明确,那么您只需在会话表中添加另一个字段并将其保存在其中。
我在这里得到了解决方案
所以我使用了会话解码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'];
ykay;的解决方案假定您正在使用当前内置的会话处理程序。应用程序可以随时更改这种格式,并且不能保证PHP会保持这种格式。
您的解决方案破坏当前会话,并用存储的数据替换它(但至少它将使用"当前"序列化方法)。
序列化函数和session_函数的读/写操作可以在运行时重写。只要你读回使用与解码相同机制编码的数据,你的机制就会起作用——但对于数据的长期存储或在无法保证PHP安装读取数据的一致性的情况下使用,这是一种糟糕的方法。
解决在用户会话之外读取会话数据问题的正确方法是使用serialize/unserialize格式:
ini_set("session.serialize_handler", 'php_serialize');
然后使用unserialize()读取数据。