更改PhpMyAdmin Cookie路径



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

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

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

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

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

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

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

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

  • 用相同的名称和sessionid设置我自己的cookie不起作用,因为在PHP处理中,cookie会被一个PMA集覆盖
  • 更改$_SERVER['PP_SELF']的值(用于确定路径的值之一)无效,不确定原因
  • 我试图扩展PMA_Config类,特别是getCookiePath()方法,但没有成功,因为我不知道如何实例化它,所以它覆盖了PMA_Config的方法

我最终使用了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();

最新更新