2015-06-27 42 views
4

我使用CodeIgniter 3.x与数据库会话驱动程序,我想访问data cloumn,BLOB类型。在这里我BLOB数据:反序列化PHP会话数据

__ci_last_regenerate|i:1435420891;identity|s:13:"[email protected] ";username|s:13:"johndoe";email|s:13:"[email protected] ";user_id|s:1:"5";old_last_login|s:10:"1435412865"; 

我试着用unserialize($string)但没有工作!

反序列化():错误在偏移0

如何访问blob数据元素?对于前:$user['email']

+0

你存储在会话 'BLOB' 的数据?这是一个有趣的方法。你知道'会话数据'会在PHP脚本结束时自动序列化,并且当'start_session'再次被'反序列化'时。你为什么在会话数据上使用'unserialize($ string)'?除非在将它添加到会话中时将其“序列化”? –

+0

@RyanVincent不是我!这些数据是会话并由CodeIgniter存储。我试图访问BLOB数据元素,但我无法获得。当我回应'blob'数据时,我得到上面的字符串看起来像序列化的数据,但'反序列化'不工作。什么类型的字符串? – Bora

+0

@RyanVincent我必须告诉你所有的CodeIgniter核心和会话库:) – Bora

回答

0

有没有直接的方法来做到这一点...你可以使用session_decode(),但它需要你已经有一个有效的会话,以便它可以把解码后的数据为$_SESSION

但是我必须告诉你,如果你想这样做 - 你做错了。你不应该访问另一个用户的会话。如果有一些数据与会话不相关,而该会话对拥有该会话的用户不明确,则应该只在会话表中添加另一个字段并将其保存在该会话中。

+0

会话使用PHP的内部序列化函数'php_serialize'进行序列化,因此通过使用此方法反序列化,可以在不写入'$ _SESSION'的情况下获取数据。请参阅'unserialize_php'这里:http://php.net/manual/fr/function.session-decode.php#108037 – beeb

+0

这是一个用户提供的功能,并且*不是*二进制安全的。 – Narf

+0

还是比将另一个用户的会话数据添加到自己的会话更好......但它将适用于大多数情况。 – beeb

1

我来到这里的解决方案

存储在普通的PHP会话中的所有加密数据所以,我已经使用会话解码http://php.net/session_decode

session_decode('__ci_last_regenerate|i:1446535049;ci_UserID|s:1:"2";ci_UserName|s:24:"[email protected]";logged_in|b:1;'); 

所以会话解码。

,我可以访问使用:

echo $_SESSION['ci_UserID']; 
+0

通过阅读文档中的评论,我发现了这个人的解决方案:http:///php.net/manual/fr/function.session-decode.php#108037。他做了一个独立版本的PHP内部反序列化函数'unserialize_php',它不会写入'$ _SESSION'变量(这很麻烦)。 – beeb