【问题标题】:issue to set up session value in iframe在 iframe 中设置会话值的问题
【发布时间】:2012-11-24 08:40:25
【问题描述】:

我正在使用 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->id 是注册用户的 id,如果用户登录,这个页面显然会打开。

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

请帮我解决这个问题。

【问题讨论】:

  • 你能用一些功能定期检查用户是否仍然登录,如果退出,只需删除 iframe 并设置某种消息?

标签: php session iframe


【解决方案1】:

无论如何你都必须执行检查服务器端,所以在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 来处理您的请求。

【讨论】:

  • 如何每隔 n 秒检查一次?你能指导我吗?
  • 感谢您的帮助。但是你能指导我如何将会话值从父页面发送到 iframe,反之亦然?
  • 我想说我的回答足以解决您在问题中提出的具体问题。共享会话不在此范围内。搜索“站点之间的共享会话”,您会发现很多关于该主题的信息,或者在 SO 上提出一个新问题。不过,您可能需要重新考虑您的方法,因为通常不推荐共享会话。
猜你喜欢
  • 2023-04-08
  • 2022-07-28
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2013-12-19
  • 2010-11-04
  • 2014-09-06
  • 2011-10-18
相关资源
最近更新 更多