我试图在我的自定义应用程序中使用PHPMyAdmin SSO,在Yii框架中制作。在phpMyAdmin指南之后,我已经在config.inc.php
中进行了必要的更改$cfg['Servers'][$i]['auth_type'] = 'signon';
$cfg['Servers'][$i]['SignonSession'] = 'MYSESSID';
$cfg['Servers'][$i]['SignonURL'] = 'http://myapp.com/site/login';
$cfg['Servers'][$i]['LogoutURL'] = 'http://myapp.com/site/logout';
PHPMyAdmin链接到http://myapp.com/phpmyadmin/,在我的应用程序中,当有人登录时,我使用用户名和密码值设置 PMA_single_signon_user 和 PMA_single_signon_password 。在注销操作中,我销毁会话(Yii :: app() - > session-> destroy()equivelant到session_unset(); session_destroy())。
当用户成功登录应用程序时,他可以单击phpmyadmin链接,并将他成功重定向到phpmyadmin界面。
当用户注销该应用程序时,不关闭浏览器并再次登录我的phpmyadmin链接将重定向到登录(SignonURL),即使用户已成功登录。
在phpmyadmin / libraries / plugins / auth / AuthenticationSignon.class.php中使用firebug和一些var_dump我注意到在注销后phpmyadmin仍在路径/ phpmyadmin /下使用了MYSESSID,它具有前一个会话'的价值。
例如,我登录myapp.com/site/login并获得
MYSESSID="value1" path=/
我成功点击了myapp.com/phpmyadmin/链接。现在我在br
中有两个MYSESSIDMYSESSID="value1" path=/
MYSESSID="value1" path=/phpmyadmin/
我注销(不关闭浏览器窗口)并再次登录,在MYSESSID中获取新值,如:
MYSESSID="value2" path=/
我点击myapp.com/phpmyadmin/链接(我在重定向到SingonURL之前退出)并看到这些会话:
MYSESSID="value2" path=/
MYSESSID="value1" path=/phpmyadmin/
从AuthenticationSignon.class.php我明白,因为phpmyadmin在MYSESSID内搜索=" value1"它无法找到所需的 PMA_single_signon_user 和 PMA_single_signon_password 因为我把它们放在MYSESSID =" value2"之下。
我所理解的最重要的是,当我在注销期间销毁会话时,在path = / phpmyadmin /下定义的会话未被删除。
任何人都知道如何在path = / phpmyadmin /下正确注销或删除会话?
当我关闭浏览器窗口时,MysESSID =" value1"已完全删除两个路径/和/ phpmyadmin /所以重新登录工作正常。
注意:我只使用myapp.com而且根本没有使用www.myapp.com
答案 0 :(得分:0)
解决方案是明确设置一个过去时间的会话cookie(因此已经过期)
setcookie("WPCPSESSID", $_COOKIE["MYSESSID"],time()-100, '/phpmyadmin/');
这样phpmyadmin会话就会过期,而不必关闭窗口。
看来session_unset(); session_destroy();仅删除“/”路径下的会话cookie而不删除子页面(例如/ phpmyadmin /)