当前位置:  开发笔记 > 程序员 > 正文

存储登录的用户详细信息

如何解决《存储登录的用户详细信息》经验,为你挑选了2个好方法。

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

我想到的两种方式是:

在会话变量中存储用户数据库ID

将整个用户对象存储在会话变量中

有任何更好的建议,使用上述方法的任何问题?也许安全问题或内存问题等等



1> Eli Courtwri..:

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

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

    如果会话信息存储在硬盘驱动器上,则只能存储可序列化数据.因此,如果您的User对象包含任何类似数据库连接,打开套接字,文件描述符等的内容,那么这将无法正确存储,也可能无法正确清理.

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



2> tghw..:

出于安全考虑,我将生成(GUID或加密安全的RNG)会话ID,并且具有仅将会话ID映射到用户ID的表.然后,您只需将会话ID存储在其Cookie中,并将其作为用户ID的代理.

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

有了这个,没有人可以通过猜测他们的ID冒充另一个用户.它还允许您限制用户的会话,因此他们必须经常登录(通常是两周).如果您想存储有关其会话的其他数据,您只需将其添加到此表即可.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有