在iframe中设置会话值的问题

时间:2012-12-06 10:26:57

标签: php session iframe

我正在使用joomla 1.5。我有一个单独的代码,它位于同一个域中但在另一个文件夹中。我通过使用iframe访问我的joomla代码中的该文件夹。现在我必须将会话值从joomla应用程序发送到iframe,我正在通过以下代码执行此操作。

echo '<iframe src="https://localhost/demo/quiz/quiz_main.php?u_d='.$user->id.'" width="910" height="885" style="background-color:transparent"></iframe>';

其中$ user-&gt; id是注册用户ID,显然如果用户登录,此页面将会打开。

然后在quiz_main.php页面中,我正在检查u_d的值,并根据我控制系统。  现在问题是,我在相同的浏览器中打开了两个具有相同URL的选项卡,并使用相同的用户ID登录。现在从一个选项卡注销。然后转到另一个选项卡。用户可以对iframe内运行的小应用程序执行任何操作,直到页面未刷新为止。但它不应该。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

无论如何你必须执行检查服务器端,所以在quiz_main.php你需要像

这样的东西
<?php
    if(!user_is_logged_in())
        // Redirect to login
?>

防止用户执行任何会影响服务器上数据的操作。

您也可以使用JavaScript检查客户端。您可以每隔n秒轮询一次服务器,以检查用户是否仍然登录,如果没有,则将用户重定向到相应的页面。

以下示例使用jQuery

function logged_in() {
    $.ajax({
        url: '/logged_in.php',
        type: 'post',
        success: function(data) {
            data = $.parseJSON(data);
            if(data['logged_in'] != true)
                window.location('login.php');
            else
                setTimeout('logged_in()', 5000); // calling itself in 5 seconds.
        }
    });
}
$(document).ready(function() {
    logged_in(); // Calling first time when the document is ready.
});

只是粗略地描述如何做到这一点。当然,您需要logged_in.php来处理您的请求。