Php 如何使用会话正确地分隔环境?

Php 如何使用会话正确地分隔环境?,php,session,Php,Session,我的软件有一个问题,这会让我很头疼。我会尽力解释的 实际上我有3个环境,所有3个环境都使用相同的注册、登录和恢复系统。但每一个都是适当分开的,比如说结构是: 管理员/ 贮藏/ 供应商/ 上面的结构包含类中的寄存器、登录和恢复方法,但代码相同。我知道它会一起制作,并创建一些识别码来分隔它们,但该软件并没有计划像这样发展,现在我们遇到了一种情况;( 例如,当我登录到管理员帐户时,我第一次遇到问题,并尝试在没有任何会话的情况下访问商店/环境(帐户)(当然,使用的会话是管理员帐户)。我获得了访问权限

我的软件有一个问题,这会让我很头疼。我会尽力解释的

实际上我有3个环境,所有3个环境都使用相同的注册、登录和恢复系统。但每一个都是适当分开的,比如说结构是:

  • 管理员/
  • 贮藏/
  • 供应商/
上面的结构包含类中的寄存器、登录和恢复方法,但代码相同。我知道它会一起制作,并创建一些识别码来分隔它们,但该软件并没有计划像这样发展,现在我们遇到了一种情况;(

例如,当我登录到管理员帐户时,我第一次遇到问题,并尝试在没有任何会话的情况下访问商店/环境(帐户)(当然,使用的会话是管理员帐户)。我获得了访问权限,如果一个供应商知道问题,或者商店的客户知道这一点,这是不安全的

我应该怎么做来防止这种类型的问题?重新编写代码?或者是否有一些变通方法可以写入会话代码

谢谢!

您可以使用来定义用于存储会话ID的cookie名称,这样您就可以命名和分隔同一主机下的不同环境。在调用
会话启动()之前使用它

例如,管理区域中的每个
会话\u start()
调用都应以以下内容开头:

session_name("ADMINSESSID");
session_start();
你们也会对商店和供应商做类似的事情

虽然它可以分离
$\u会话
环境,但我不能完全确定它的安全性(例如编辑cookie以使用供应商会话ID作为管理会话ID)。也许您还应该在每个
$\u会话
中标记它属于哪个环境

登录时:

// if user authenticated successfully to that environemnt
$_SESSION['environment'] = session_name();
同一场地区域内的任何其他地方:

if ($_SESSION['environment'] != session_name())
    die('Access violation.');

你需要更新你的代码。你如何更新代码取决于你的具体情况。这里没有任何信息可以帮助你。我想这可能是一个互相帮助的地方。无论如何,谢谢。我不是一个编码员。如果答案不在这里,当然它在另一个地方。没关系,伙计!晚安!听起来不错目前这是一个很好的解决方案。我还阅读了有关session_save_path()函数的内容,该函数必须在session_start()>之前调用。谢谢@Havenard,我将研究这两种情况,并确定哪种解决方案更好。