Web applications 存储登录的用户详细信息

Web applications 存储登录的用户详细信息,web-applications,Web Applications,在创建web应用程序时,假设您有一个表示单个用户的用户对象,您认为存储用户已登录的信息的最佳方式是什么 我想到的两种方法是: 将用户数据库id存储在会话变量中 将整个用户对象存储在会话变量中 使用上述方法有什么更好的建议和问题吗?可能是安全问题或内存问题等等。请记住,如果您在会话中存储了所有用户的属性(这扩展到权限),那么对用户的任何更改都不会生效,直到他们再次登录 就我个人而言,我存储姓名和id以供快速参考,并在需要时提取其余的。我认为这取决于您使用的平台。如果您使用的是ASP.net,那

在创建web应用程序时,假设您有一个表示单个用户的用户对象,您认为存储用户已登录的信息的最佳方式是什么

我想到的两种方法是:

  • 将用户数据库id存储在会话变量中
  • 将整个用户对象存储在会话变量中

使用上述方法有什么更好的建议和问题吗?可能是安全问题或内存问题等等。

请记住,如果您在会话中存储了所有用户的属性(这扩展到权限),那么对用户的任何更改都不会生效,直到他们再次登录


就我个人而言,我存储姓名和id以供快速参考,并在需要时提取其余的。

我认为这取决于您使用的平台。如果您使用的是ASP.net,那么我肯定会看看该类以及所有内置(和可扩展)功能,您可以使用这些功能来存储登录的用户设置

在大多数情况下,存储ID是最佳做法。其中一个重要原因是可伸缩性。如果存储用户对象(或数据库中的任何实体,而不仅仅是它们的ID),则在扩展为站点服务的服务器数量时会遇到问题。有关更多信息,请使用谷歌搜索“无共享架构”。

我通常将用户存储在会话中。在您进行更改后,通过将会话中的对象替换为新副本,可以解决无法更改登录的问题。

我们的用户对象相当轻量级,因此我们选择将其存储在会话变量中。不确定这是否最有效,但到目前为止,它工作得非常好。

我建议存储id而不是对象。缺点是,每次您想要获取该用户的信息时,都必须访问数据库。但是,除非页面中的每毫秒都很重要,否则性能不应该成为问题。这里有两个优点:

  • 如果用户的信息发生了某种变化,那么您就不会在会话中存储过时的信息。例如,如果管理员授予用户额外权限,则这些权限将立即可用,而用户无需注销然后重新登录

  • 如果会话信息存储在硬盘上,则只能存储可序列化的数据。因此,如果您的用户对象曾经包含数据库连接、开放套接字、文件描述符等内容,那么这些内容将无法正确存储,也可能无法正确清理


  • 在大多数情况下,这些问题不会成为问题,任何一种方法都可以。

    为了安全起见,我将生成(GUID或加密安全的RNG)会话ID,并有一个表,该表仅将会话ID映射到用户ID。然后,您只需将会话ID存储在他们的cookie中,并将其作为用户ID的代理

    |会话|用户ID |

    |--------------------

    | a1d4e…+12345

    |--------------------

    | c64b2…+23456

    |--------------------


    这样,任何人都不能通过猜测用户ID来冒充其他用户。它还允许您限制用户的会话,以便他们必须每隔一段时间(通常是两周)登录一次。如果您想存储关于他们会话的其他数据,可以将其添加到此表中。

    我将存储用户id和会话id的哈希值,然后在数据库的会话表中进行匹配。这样就更难伪造会话数据。我可以在IP上做额外检查吗

    我不确定我是否希望依赖存储在会话变量中的用户ID,并相信它就是那个用户,因为它可以相当容易地被修改,并作为另一个成员获得访问权