2015-06-27 96 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