iframe持有以前的php会话信息

时间:2017-10-30 15:47:27

标签: php iframe session-variables

我正在开发一个应用程序,其中链接正在打开包含表单的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();
}

知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

完全实施您的注销行为

  

如果用户退出并打开浏览器... [iframe   $ _SESSION]显示原始用户的所有会话信息。

有你的问题。

任何完全实施的注销行为都需要清除浏览器Cookie和$ _SESSION数据。

浏览器缓存

最有可能发生的事情是浏览器正在缓存该iFrame中的网址结果,并且/或者仍然在Cookie中包含用户数据。

实施用户会话密钥,或在iFrame网址中加载令牌。

充分解决此问题以防止将来出现此问题,可能需要执行以下步骤:

iFrame网址:

  • 包含会话令牌或随机生成的令牌,作为iFrame网址的查询字符串参数。需要加载iframe,并针对$ _SESSION检查服务器端,以确保它与当前登录的用户匹配。
  • 为此iFrame设置超时。部分问题是如果用户打开此选项卡但是从其他选项卡注销会发生什么?除了实现超时之外,在这种情况下你无能为力,或者在iframe上为匹配的会话实施常规的ajax检查。

注销:

  • 清除浏览器Cookie。
  • 清除会话。

关于清除会话

  

为了完全终止会话,会话ID也必须是   未设置。如果使用cookie来传播会话ID(默认值)   行为),然后必须删除会话cookie。 setcookie()可能是。{3}}   用于那个。

PHP Session Destroy

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

来自:PHP session_destroy Example 1