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();