在PHP中进行身份验证的最佳方法

在PHP中进行身份验证的最佳方法,php,model-view-controller,authentication,remember-me,Php,Model View Controller,Authentication,Remember Me,当以模型-视图-控制器的方式编写身份验证库时,最好和最安全的方法是什么 让我感到困难的是跟踪用户的活动,通过cookie记住用户,或者在数据库中存储会话 提前感谢:)。实现它的最简单方法是使用PHP会话 只需session_start();在脚本开头附近,您可以访问$\u会话全局数组以保存身份验证数据 根据服务器的配置,$\u会话中存储的所有数据将仅在托管该数据的服务器上可用(只有少数例外)。您可以将其配置为保存在临时目录、memcached甚至数据库中 客户端和服务器之间传输的唯一内容是“会话

当以模型-视图-控制器的方式编写身份验证库时,最好和最安全的方法是什么

让我感到困难的是跟踪用户的活动,通过cookie记住用户,或者在数据库中存储会话


提前感谢:)。

实现它的最简单方法是使用PHP会话

只需session_start();在脚本开头附近,您可以访问$\u会话全局数组以保存身份验证数据

根据服务器的配置,$\u会话中存储的所有数据将仅在托管该数据的服务器上可用(只有少数例外)。您可以将其配置为保存在临时目录、memcached甚至数据库中


客户端和服务器之间传输的唯一内容是“会话密钥”。密钥可以通过cookie或URL重写(由启动会话输出缓冲区透明处理)来传递。

如果您想使用会话,您可以保护它们免受攻击,如

为了防止这两种情况发生,您必须确保只允许经过身份验证的请求使用会话。这通常是通过将尽可能多的关于客户端的特定(可能唯一)信息链接到会话来实现的。但由于某些信息可能会在每次请求时发生变化(如IP地址),因此很难找到好的信息。
这就是为什么使用表示为的方法是有用的


另一个好的保护措施是定期交换会话ID。因此,攻击有效会话ID的时间更短。

谢谢。但是,我如何跟踪用户的活动,如何给用户一个保持登录1个月的选项?我应该在数据库、会话或cookie中存储哪些内容?检查一切是否正常的最佳方法是什么?这将是在cookie中显式设置附加哈希,然后在DB中存储IP,如果用户从不同的ip登录,或者cookie中的哈希值与db中的哈希值不匹配,则要求用户再次登录。如果会话数组中存储的时间戳超过某个时间段,您只需进行检查,即可在会话_start()后使会话无效。那么你就不必处理cookies了。你应该尽可能地重用现有的身份验证框架,因为它确实很复杂。例如,看看哪个是框架不可知的,哪个是数据库不可知的。