0

这是一个与我正在构建的网站相关的设计问题。

我有一个“玩家”表,它将存储姓名、密码、最后一个 IP、出生日期、头像链接、位置等。

当玩家登录时,将在数据库中搜索他们输入的用户名,并检查他们的密码(是的,当然密码是经过哈希处理的)。然后,他们将获得一些让他们保持登录状态的 cookie。

每次他们访问新页面时,都会使用 cookie 中的信息在数据库中查找正确的玩家。如果他们当前的 IP 与他们登录的最后一个 IP 匹配(可能是 10 秒前),则页面会输出他们的名字等等。

这是我的问题:我应该让 Player 表的主键是玩家的名字(我知道这是唯一的文本字段),还是应该为此创建一些任意的自动递增索引?

请记住,这也会对存储在 cookie 中的信息产生影响——无论是存储 int 还是文本中的用户名。同样,我想对该值进行某种散列(只是为了增加一点安全性),以便 cookie 不只包含 int 或用户名。

那么,就效率和设计而言,哪个是更好的选择呢?

编辑对数据库使用 VARCHAR 也可以,而且可能更快,我想。 EDIT2这个主键也将被其他表引用。

4

2 回答 2

1

正如 Marc 的评论所表明的那样, int 在内存和性能方面都会更有效。我建议不要将登录名绑定到 IP 地址,某些用户将对服务器的每个请求都来自不同的 IP 地址(洋葱路由器、AOL,谁知道还有什么其他奇怪的公司 NAT),并且一直被注销会超级烦人的。您可能还想考虑使用会话而不是设置一个 cookie,说明他们的登录身份。尽管有一个 sig 会使其更安全,但使用会话会更安全,同时让您更灵活地在用户登录之前跟踪有关用户的信息(例如,成功登录后应该将他们重定向到哪个页面)。

于 2012-04-26T03:59:28.063 回答
0

这是我的问题:我应该让 Player 表的主键是玩家的名字(我知道这是唯一的文本字段),还是应该为此创建一些任意的自动递增索引?

后者。
名称往往会改变。

  1. 是否以文本形式存储 int 或用户名。
  2. 同样,我想对该值进行某种散列

请先下定决心,然后问
它最终会是散列还是普通值?如果是后者 - 那么有什么区别呢?

那么,就效率和设计而言,哪个是更好的选择呢?

哦。这个绝对无所谓。

于 2012-04-26T04:04:56.737 回答