2016-09-18 58 views
3

我正在自定義一個登錄系統,並且出於安全原因被要求記錄所有身份驗證請求。我應該使數據庫字段保存useragent字符串多長時間?

有一件事我打算做的是記錄輸入的用戶代理字符串和要求時,將顯示如Request from: (Chrome/Windows)Request from: (Firefox/Mac)

應該我varchar字段是在MySQL什麼長度翻譯呢?

我是否需要整個useragent字符串來準確確定客戶端未來的瀏覽器/操作系統信息?還是有一些規範的useragents,允許我只從中提取一個子字符串,並放棄其餘的「無用信息」。

+1

相關:http://stackoverflow.com/questions/15140416/user-agent-strings-what-should-i-capture?rq=1 http://stackoverflow.com/questions/23742935/user-agent- header-abbreviation-for-mysql-storage?rq = 1 – Thilo

+0

使用TEXT而不是varchar –

回答

1

簡答:即使它是任意大的,一些用戶代理將仍然被截斷。

更長的答案:除非你打算在User-Agent上放置一個索引(我不明白爲什麼你會這麼做,如果它只是出於記錄/顯示的目的),沒有理由使用VarChar而不是文本字段這足夠長。

或者,您可以尋找一個User-Agent解析庫,將字符串轉換爲更有用的字符串,例如「Chrome/Windows」或「Safari/iPhone」,在這種情況下,您可以合理使用較短的VarChar值。

用戶代理字符串絕對沒有規範。它們完全是任意的,儘管許多用戶代理都遵循一​​些你不能總是假定的一般模式。

總之,你的3個選項是:

  • 得到一個庫來解析這些有意義
  • 挑選任意VARCHAR長度和接受,有些人會被切斷
  • 使用文本字段
+0

MySQL中varchar的最大長度是65535字節,而不是255。http://dev.mysql.com/doc/refman/5.7/en/char.html –

+0

啊,看起來像它改變了5.0和我一直生活在一個謊言:P 更新的措辭,但一般的信息是一樣的。 –

相關問題