我正在开发一个应用程序,其中链接正在打开包含表单的iframe。预先填充的表单输入取决于登录的用户。这适用于第一个登录的人,但如果用户注销并让浏览器打开以供其他用户登录,则在导航到该iframe时,它仍会填充在原始登录用户上。
当执行$ _SESSION的print_r时,它会显示原始用户的所有会话信息。但是如果我在登录后打开登录页面上的会话信息,它会显示当前登录用户的正确用户信息。
退出代码:
function LogOut() {
session_start();
$sessionvar = $this->GetLoginSessionVar();
$_SESSION[$sessionvar]=NULL;
unset($_SESSION[$sessionvar]);
if(isset($_COOKIE['PHPSESSID'])):
setcookie('PHPSESSID', '', time()-7000000, '/');
endif;
session_destroy();
}
知道这里发生了什么吗?
答案 0 :(得分:0)
如果用户退出并打开浏览器... [iframe $ _SESSION]显示原始用户的所有会话信息。
有你的问题。
任何完全实施的注销行为都需要清除浏览器Cookie和$ _SESSION数据。
最有可能发生的事情是浏览器正在缓存该iFrame中的网址结果,并且/或者仍然在Cookie中包含用户数据。
充分解决此问题以防止将来出现此问题,可能需要执行以下步骤:
iFrame网址:
注销:
为了完全终止会话,会话ID也必须是 未设置。如果使用cookie来传播会话ID(默认值) 行为),然后必须删除会话cookie。 setcookie()可能是。{3}} 用于那个。
调用session_destroy()
或设置$_SESSION = array()
会不删除会话Cookie(保留以前用户的会话)。要正确销毁会话,请致电setcookie()
。
session_start();
// Unset all of the session variables.
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();