1

PhpMyAdmin 将 cookie 路径设置为安装 PMA 的路径。

  • 因此,如果它安装在/pma/中,它会将 cookie 路径设置为/pma/

但是,我有注销代码,需要访问会话才能将用户与其他系统会话一起从 PMA 中注销,但它位于/中。

这当然不起作用,因为浏览器不允许在 cookie 路径之外访问 cookie。

在 php.ini 中设置默认 cookie 路径不起作用,因为 PMA 在设置将覆盖 php.ini 设置的 cookie 时指定了自己的路径。

有没有办法通过设置配置选项或可能扩展 PMA 类将 PMA 设置的默认 cookie 路径更改为/ ?我还读过一个叫做猴子补丁的东西runkit,它可以做到吗?如果有怎么办?

编辑 PMA 核心文件不是一种选择,因为我希望在升级之间进行更改。如果可以将其编码到 config.inc.php 中,它将在升级之间保持不变。

我通过 config.inc.php 尝试过的一些事情:

  • 使用相同的名称和 sessionid 设置我自己的 cookie 不起作用,因为 cookie 被 PHP 处理中进一步设置的一个 PMA 覆盖。
  • 更改 $_SERVER['PHP_SELF'] 的值,这是用于确定路径的值之一,不起作用,不知道为什么。
  • 我试图扩展 PMA_Config 类,特别是 getCookiePath() 方法,但没有工作,因为我不知道如何实例化它,所以它覆盖了 PMA_Config 的方法。
4

1 回答 1

0

我最终使用了PMA的Signon authtype

然后我的 PMA 配置变为:

$cfg['Servers'][$i]['auth_type']     = 'signon';
$cfg['Servers'][$i]['SignonSession'] = 'YOUR_SESSION_ID'; // You can use ini_get('session_name') if you prefer
$cfg['Servers'][$i]['SignonURL']     = 'FULL_URL'; // URL it will redirect unauthenticated users
$cfg['Servers'][$i]['LogoutURL']     = 'FULL_URL'; // URL where user will be redirected after logout

在我的 SSO 脚本中,我在登录系统的其余部分时添加了这些行,因此它也将同时登录到 PMA。

$_SESSION['PMA_single_signon_user'] = 'MY_PMA_USERNAME';
$_SESSION['PMA_single_signon_password'] = 'MY_PMA_PASSWORD';

现在我不需要访问 PMA cookie,因为它使用主系统设置的 SID cookie。要注销主系统和 PMA,我会定期注销 cookie:

$_SESSION = array();
setcookie(session_name(), '', time() - 3600);
session_destroy();
于 2012-12-19T21:48:49.807 回答