使用Cookie进行PHP身份验证的最佳做法是什么?

时间:2009-10-27 23:33:24

标签: php authentication cookies

我正在寻找有关如何使用Cookie最佳地将身份验证与PHP结合使用的提示和想法。

每个php脚本是否应该检查cookie值以确定用户是否仍然登录?是否应该有一个脚本执行此检查并包含来自其他每个脚本的脚本? php可以从文件系统的不同深度看到cookie值吗?

赞:blahblahblah.com/和blahblahblah.com/login /

他们都可以读取cookie吗?

关于一篇文章的很多问题,但谢谢!

4 个答案:

答案 0 :(得分:3)

客户端没有任何安全措施。

您可以在任何浏览器上轻松更改Cookie上的登录标记。因此,建议在php的$ _SESSION

上保存与登录相关的数据

如果您希望延长会话时间,只需查看session_set_cookie_params()

默认情况下,相同的会话将用于当前域和该域上的所有路径。因此,它对于blahblahblah.com/和blahblahblah.com/login /

都是可读的

当用户登录时,在会话中保存用户名和密码的哈希值。

在每个脚本的开头,使用数据库中的一个验证会话的用户名和密码。如果正确,则设置一个标志(例如$ userLoggedIn = true)以在服务器端指示用户已登录。否则为false。

答案 1 :(得分:2)

一些想法,没有特别的顺序:

  • 分离各个层:持久存储与身份验证。
  • PHP会话非常强大,是维护持久存储的推荐方法。
  • 您可以拥有有效的会话,但不能使用有效的登录信息。
  • 避免使用多个Cookie。一个就够了。 PHP会话使用一个cookie。
  • 您可以在Cookie上设置子域和路径,但除非您设置批次,否则确实没什么意义,不建议这样做(见上文)。
  • 将您认为可能需要的所有内容放入会话中的Cookie中。
  • 您应该拥有所有网页都包含的常用代码。这是您初始化会话的地方。然后一切都会正常工作。它也可以验证登录是否有效。
  • 让一个地方执行登录身份验证以及与之相关的所有内容。
  • 不要忘记退出屏幕!

答案 2 :(得分:0)

让一个脚本执行会话/登录检查并将其包含在安全页面中是一个好主意。 AS的深度,您可以在setcookie()中定义,如果目录参数设置为“/”,那么它可以全部访问。

通常使用会话而不是cookie是一个好主意,因为它更安全,但您可以决定基于cookie中的加密数据构建自己的会话系统,这也可以工作,但是会话,存储数据的会话建议在服务器端使用。

答案 3 :(得分:0)

Cookie是每个域名,因此无论您的目录结构有多深,都可以正常阅读Cookie(只要您的域名保持不变 - 请注意这意味着www.example.com和example.com可以是不同的cookie)。

我建议进行身份验证检查,将Cookie中的会话ID与例如登录用户的数据库表及其会话ID进行比较 - 此检查可以在其自己的方法/包含文件中包含()' d在每页上。这样,将在每个页面加载时执行检查。 NB 这是基本的,并且有更安全的方法 - 其中一些已在此处的其他评论中提及。

作为Mauris said,客户端没有任何安全 - 不要使用cookie来存储“logged_in”值,你检查它是否为真/假!