我想用PHP实现一个登录机制,能够:
问题:我怎样才能实现这一点?
大致上,我打算按照以下流程图来实现这次登录:
requestContentPage()
。然后,服务器检查用户是否最多在 x 天前登录(框(1))。如果用户最多 x 天前没有访问过该网站(即一段时间内第一次登录,或有史以来第一次登录),则通过 renderLoginPage()
函数调用登录页面。另一方面,如果最后一次登录是“最近”完成的,那么(3)我们检索用户的信息,然后(4)我们呈现所请求的内容页面。
当用户在登录页面点击“登录”按钮时,会调用函数
submitLoginPage($u, $p$)
。然后(5),系统检查密码为$u
的用户$p
是否是数据库中的“用户表”。如果是这样 (6),则将登录持续时间设置为 x 天,并呈现内容页面 (4)。否则,将再次呈现登录页面以询问正确的凭据。
我很确定我可以使用“会话”在 PHP 中实现这一点(即
session_start()
、session_status()
等)。我已经问过类似的问题了
但我无法更进一步。在那里,您可以找到我的 PHP 代码尝试。我被困住了。 (也许有些函数的命名与本文中的不同)。
“如果您在上次登录后 x 天内重新访问该网站,则无需再次询问用户名和密码。”
您的问题 - 或者至少是a问题 - 是使用cookie进行访问,并且该cookie不仅设置为在相对短的时间限制内过期(取决于服务器和您)可能无权访问此配置),但大多数服务器都有例程,会在一段时间后销毁服务器端 cookie 数据,独立于 Web 服务器。
该机制的工作原理如下:
/var/lib/php/tmp/session-baadf00d
因此,在您的场景中,大约一两天后,文件被删除,客户端会带着旧的 cookie 返回,您瞧,服务器已经忘记了它们。在这种情况下,PHP 会自动启动一个全新的空会话。
一个可能的解决方法是将会话 ID(来自 cookie)保存在数据库中,并在其中存储最少量的信息以及会话创建
或更新时间。
然后:
session_id()
恢复它)。
整个信息包:
true 登录,其中validation = MD5("{$ Secret},{$timestamp}") - 当令牌可能被刷新时,客户端必须在后续登录时发回此信息。这样,客户端就无法自己“刷新”令牌,因为他们不知道必要的 $secret,并且您可以避免人们在三年后使用陈旧的伪造包登录。