phpmyadmin sso在注销时不删除现有会话

时间:2014-04-29 14:00:21

标签: php session yii phpmyadmin single-sign-on

我试图在我的自定义应用程序中使用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

中有两个MYSESSID
MYSESSID="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

1 个答案:

答案 0 :(得分:0)

解决方案是明确设置一个过去时间的会话cookie(因此已经过期)

setcookie("WPCPSESSID", $_COOKIE["MYSESSID"],time()-100, '/phpmyadmin/'); 

这样phpmyadmin会话就会过期,而不必关闭窗口。

看来session_unset(); session_destroy();仅删除“/”路径下的会话cookie而不删除子页面(例如/ phpmyadmin /)