【问题标题】:Endless PHP Session like Amazon does (theory)像亚马逊一样的无尽的 PHP 会话(理论)
【发布时间】:2016-01-29 23:40:53
【问题描述】:

找不到这个问题的副本,所以这里是:

我有兴趣建立一个 php 网站,其帐户可以像亚马逊一样工作。我的意思是,当我去亚马逊时,我的会话总是“登录”,但不是真的。该网站知道我是谁,我可以访问我保存的购物车数据和某些“不安全”的帐户操作,但每当我想做任何事情,例如查看我的订单或实际结账时,我仍然必须登录。

我在亚马逊上处于“未登录但有点登录”状态时查看了 cookie,我没有看到任何东西跳出来,但我猜他们存储了某种标识符 cookie,允许该站点根据我的用户帐户启动会话,但在“未经身份验证”模式下,大多数事情都受到限制,但不是全部。

所以我想知道是否有人对我的想法有任何提示或陷阱:

1 - 用户帐户都具有某种 MD5 类型,该 MD5 是在创建/更新帐户时根据用户名和密码创建的。

2 - 每次对会话进行身份验证时,它都会确保有一个 /permanent/ cookie 与这个 md5 哈希一起存储。

3 - 当访问者加载页面时,如果没有活动的会话数据,它会检查 md5 cookie 并将用户的基本“未经身份验证”信息加载到与该 md5 匹配的会话中,因此现在网站知道他们的姓名和他们保存的购物车等。

(有人可以尝试随机 md5 哈希以尝试加载不同的用户名/购物车从而获得“登录电子邮件”地址,这是一个问题吗?值得我花时间在 md5 检查上进行某种蛮力检测吗? ?)

4 - 当处于未经身份验证状态的用户尝试执行需要身份验证的操作时,会显示登录页面,并预先填写电子邮件/帐户名称框。然后在成功登录后重定向到请求的操作。

(如果没有 md5 cookie 或 md5 不好,只需扔掉 cookie 并显示网站“无用户”模式。)

想法?担忧?更好的想法?

【问题讨论】:

  • 这只是基本的“记住我”功能,当您了解它的工作原理时,拥有两种“登录”状态是微不足道的,顺便说一句,其中任何一种都不应该使用 md5。
  • 只使用cookies,你想太多了
  • 其实并不是无休止的会话。它只是从 cookie 中恢复会话。 md5太老了,太简单了,已经不是流行的了,别用了。

标签: php session


【解决方案1】:

为了做这样的事情,我建议设置一个加密的 cookie,你可以用某个 salt 读取它。在该加盐/加密的 cookie 中,保存用户 ID 和登录日期,以便您可以设置时间限制来检查两者之间的差异并确定您是否要允许他们访问这些特定的 insecure 部分网站。

我真的觉得这是处理此类事情的最有效方式。将所有其他内容保存在数据库中,然后使用 cookie 保存的 ID 从数据库中获取信息(当然是在解密 cookie 之后),以获取您想要的其余数据(购物车等)

希望这会有所帮助!

【讨论】:

  • 散列是一种功能,没有什么比得上“取消散列”了。
  • @maxhb 谢谢你,我在写这篇文章的时候一定是受到了某些东西的影响。相应地修复。
猜你喜欢
  • 2019-01-01
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
相关资源
最近更新 更多