2011-10-03 326 views
0

我試圖存儲IP地址和PHP的會話ID,以「唯一」識別用戶,管理用戶隊列,通過互聯網使用令牌來控制(一個)硬件設備。當用戶擁有令牌時,有權控制設備X時間(2分鐘)。然後我還需要一個時間戳,即用戶請求令牌的時間。sqlite的IP地址存儲

我發現問題找到IP地址和SQlite中的時間戳的正確字段類型。

我正在使用PHP,所以這將是可取的一個簡單的方法來檢索匹配「文本」Cookie會話ID和IP的數據庫的隊列,使用時間戳來排序和過濾。

什麼是將它們存儲在SQlite數據庫中的更好方法?

我應該使用整數還是文本字段?並有功能與這些類型的工作?

+2

IPs通常存儲爲整數。 PHP有一個函數可以將它們轉換爲:http://php.net/manual/en/function.ip2long.php – hakre

+2

@hakre - 僅適用於IPv4。 – Joe

+1

會話ID應該足以用於識別,php會爲您處理。您可能需要存儲ip地址以獲取信息,並將其轉換爲含有inet_ntop()的文本字符串。 –

回答

2

SQLite是弱類型的,但支持類型親和性。在所有的SQLite只支持一個小範圍的「column types」(「式的親和力」)的

INTEGER 
REAL 
NUMERIC 
TEXT 
BLOB 
NONE 

然而,在你的情況,你可以選擇:您可以將時間戳UNIX時間戳存儲在INTEGER,或日期時間格式化字符串在TEXT。請參閱上述鏈接提供的文檔中的「1.2日期和時間數據類型」部分。有Date And Time Functions可以幫助你處理這類數據。

將IP轉換爲一個後可以將其存儲爲INTEGERip2long()。或者您也將其存儲爲TEXT。我建議使用前者。