【发布时间】:2012-08-23 13:44:52
【问题描述】:
这是一个多部分问题,因此请随时就任何部分提供意见,但由于我只能接受一个答案,我将接受与以下相关的最完整答案所有这些都被问到了。如果部分答案相关且有用,我会投票赞成。
首先,有一点背景知识,不用 TL;DR 关于这个问题:我在这个项目中使用 Quake Framework(是的,它是我的)——为了快速描述它,它使用了 CodeIgniter 和jQuery 1.8.0 主要是(除其他外,但它们与问题无关。)它还包括 Total Storage jQuery 插件(用于本地存储)和 jQuery Cookies 作为不支持的浏览器的后备支持本地存储。
第 1 部分:
我已经建立了一个用户认证系统。登录具有“记住我”功能(目前还没有功能)——存储用户数据的最佳方式是什么?一些想法:
- 将用户名和 sha1'd 密码存储在本地存储/cookie 中。在我看来,这可能是一个不安全的选择,但我不确定。
- 在 localstorage/cookie 以及数据库中存储某种哈希值(可能是 PHP 的
com_create_guid()?)(可能还有到期日期?)
第 2 部分:
实施“记住我”功能后,完成实施的最佳方式是什么?我是否应该让每个页面都检查 cookie(因为用户最初可能会点击任何页面并且需要重新记录?)虽然每个页面当然都需要检查会话,并且一旦它们被 cookie/本地存储重新记录,他们将获得一个常规会话,在每个页面上检查会话和 cookie 似乎非常多余(我们当然会首先检查会话,这样我们就不会重复检查登录用户的 cookie,如果没有会话,然后检查 cookie,但仍然存在。)有更好的方法吗?
【问题讨论】:
-
您如何在数据库中存储密码?您应该以不会泄露任何信息的方式将它们暴露给用户(例如,通过 cookie)。
-
@arxanas 它们以 SHA1 + CodeIgniter 中使用
do_hash的硬编码密钥的形式存储在数据库中。 codeigniter.com/user_guide/helpers/security_helper.html - 这使用 SHA1 和自定义分配的加密密钥。我正在考虑将用户名和 CI 加密密码存储在 cookie 中(支持时为本地存储),但我不确定这是否安全? -
会的,但
SHA1已被普遍认为不如bcrypt之类的解决方案好。虽然除非您拥有庞大的客户群,否则这可能不会成为问题,但您应该牢记这一点。如果您不想使用 cookie,您可以只使用会话并将数据放在用户无法访问的范围内。 -
@arxanas 如果用户选中“记住我”并在一周后回来,是否有办法保持持久会话?
-
我有一个纯 JavaScript 代码,用于“记住我”的功能。想试试吗?
标签: php javascript jquery cookies local-storage