当创建一个网络应用程序,并可以说你有一个用户对象表示一个单一的用户,你认为什么是最好的方式来存储用户登录?

两种方式我认为有关:

  • 存储用户的数据库id在一个会议变
  • 储存的整个用户的对象在一个会议变

任何更好的建议,任何问题与使用上述方法?或许安全问题或存储问题,等等,等等。

有帮助吗?

解决方案

我推荐储存的id,而不是对象。缺点是,你必须打的数据库每次你想要得到的,用户的信息。但是,除非每一毫秒计,在你的网页,这性能不应该是一个问题。这里有两个优点:

  1. 如果用户的信息的改变以某种方式,那么你将不会被储存了过期的信息会议。例如,如果一个用户被授予额外特权的管理员,然后这些就是立即可用的用户不需要退出,然后登录。

  2. 如果你们的会议的信息存储硬盘驱动器上的,然后你只能储存序列化的数据。所以如果你用户对象没有包含任何东西就像一个数据库连接,打开插座、文件描述等那么这将不会被妥善保存和可能不会清理了正确的。

在大多数情况下,这些问题不会是个问题和方法将被罚款。

其他提示

为安全起见,我将产生的(无论是GUID或加密的安全丽贝卡)一届会议ID和一个表,只是地图届会议Id用户标识。然后,你只store session ID在他们的饼干,并有其充当代理,为用户标识。

|Session |UserID |
|--------+-------|
|a1d4e...+ 12345 |
|--------+-------|
|c64b2...+ 23456 |
|--------+-------|

与此,没有一个能模仿其他用户通过猜测他们的身份证。它还可以限制用户的会议,因此他们必须登录在每一个经常(两个星期通常的).如果你想到其他存储数据有关他们的会话,你可以将它添加到这表。

只要记住,如果存储用户的所有属性(此延伸至权限)中的话,那么任何变化的用户不会采取有效,直到它们再次登录。

就个人而言,我店的名字和身份快速参考,并获取其他当我需要的。

存储ID是最好的实践在大多数情况下。一个重要的原因是可扩缩性。如果你存储用户的对象(或任何实体从数据库中,而不仅仅是他们的IDs),你会遇到的问题,扩大数量的服务器服务的网站。更多信息,谷歌"共有什么建筑"。

我认为,它取决于什么样的平台所使用。如果您使用ASP.net然后我肯定会看看的 FormsAuthentication 类和所有的内在(与扩展)的功能有可用于储存登录用户的设置。

我要储存一散列值的用户标识和session id然后匹配,在一个会议数据库中的表。这样,它将很难以欺骗会议数据。能做我检查的知识产权也作为一个额外的检查。

不确定我会想到依赖一个用户名被存储在一个会议变量,并相信它是用户,因为它可以改变很容易获得作为另一件

我存储用户在该届会议上,通常。这不可能-变化-直到登录问题可以解决通过替换的对象在该届会议用一个新的复制后你做了变化。

我们的用户对象是相当轻量级的,所以我们选择将其存储在一个会议变量。不知道,如果这是最有效的,但迄今为止它的工作非常漂亮。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top