2016-09-18 1207 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 更新的措辞,但一般的信息是一样的。 –

相关问题