gpt4 book ai didi

php - 如何在 PHP 中实现增强的 session 处理

转载 作者:可可西里 更新时间:2023-11-01 13:23:36 25 4
gpt4 key购买 nike

我在 PHP 中使用 session ,并且我在单个域上有不同的应用程序。问题是,cookie 是特定于域的,因此 session ID 会发送到单个域上的任何页面。 (我不知道是否有办法让 cookie 以不同的方式工作)。因此 session 变量在该域的每个页面中都是可见的。我正在尝试实现自定义 session 管理器来克服这种行为,但我不确定我的考虑是否正确。

我想完全避免 PHP session 系统,并创建一个全局对象,它将存储 session 数据并在脚本结束时将其保存到数据库。

  1. 在第一次访问时,我会生成唯一的 session_id 并创建一个 cookie
  2. 在脚本结束时保存 session 数据,包括 session_id、 session 开始和最后访问的时间戳,以及来自 $_SERVER 的数据,例如 REMOTE_ADDR、REMOTE_PORT、HTTP_USER_AGENT。
  3. 在每次访问 chceck 数据库以获取客户端在 cookie 中发送的 session_id 时,检查 IP、端口和用户代理(出于安全考虑)并将数据读入 session 变量(如果未过期)。
  4. 如果 session_id 已过期,则从数据库中删除。

那个 session 变量将被实现为单例(我知道我会与这个类紧密耦合,但我不知道更好的解决方案)。

我正在尝试获得以下好处:

  • session 变量在同一服务器和同一域的其他脚本中不可见
  • session 过期的自定义管理
  • 查看打开 session 的方式(类似于在线用户列表)

我不确定我是否忽略了此解决方案的任何缺点。有没有更好的办法?

谢谢!!

更新:我没有足够详细地解释它并在这里造成了很多困惑,所以我想更清楚地说明我正在处理的内容:

我正在构建 SOA 服务器应用程序,该应用程序将部署在许多不同的环境中。它没有自己的网络服务器,因此在那些环境中可能会有另一个 PHP 应用程序。这些公司的员工将在该应用程序中拥有用户帐户,因此他们将获得一个带有 session ID 的 cookie 到该应用程序中。

正如我们所知,在加载 session 数据时运行 PHP 的网络服务器不会影响(至少在默认情况下)从哪个目录创建 session 的脚本。它所需要的只是一个 session ID。此 session ID 与从客户端到服务器的每个请求一起发送。从你的回答中我得到了一种方法,PHP 如何限制特定目录的 cookie,但恶意用户能够编辑 cookie,因为它存储在他的计算机中。在我的案例中,恶意用户可以访问在同一环境中编写和执行 php 脚本,尽管无法访问我的应用程序及其数据库。如果他创建一个脚本,他可以使用我应用程序 cookie 中的 session ID,因此他有权读取和编辑我应用程序上的 session 数据,并获得对我应用程序部分的访问权限,他不应该被允许这样做。

我看到在这样的环境中部署应用程序会有另一个安全威胁,我要做的是我能做的最好的隔离,默认 session 处理似乎太危险而且不是为这样的用途设计的。

所以我的问题是,如果您看到某些东西在我的设计中比默认 session 管理更不安全、更不灵活……

谢谢你的回答,..

最佳答案

你需要使用:

session_set_cookie_params()

http://www.php.net/manual/en/function.session-set-cookie-params.php

特别是您需要在每个网络应用程序中设置“路径”。

关于php - 如何在 PHP 中实现增强的 session 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2801942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com