PHP CodeIgniter - 在cookie过期后唱歌但页面仍然存在,该怎么办?

时间:2016-03-01 18:23:19

标签: javascript php jquery codeigniter cookies

我不知道在标题中放什么,因为我发现情况有点复杂和尴尬。

我有一个可以登录的界面,还有一个仪表板。在那里有一个输入,让你搜索数据库中的项目,结果通过$ .ajax返回。

现在,如果用户在页面上停留的时间过长,他们的Cookie会过期,但它们仍然在页面上。因此,当他们在输入中键入内容时,“is_logged_in()”会被触发,返回false,然后吐出登录屏幕,就像它应该的那样。

但是因为ajax正在加载返回到某个div的任何内容,它最终会加载整个登录窗口 in 搜索项目应该出现的区域,如果是有道理。

我考虑使用JavaScript在将其加载到div之前读取返回的数据,但我试图避免使用JS重定向,除非绝对必要。

有什么方法吗?

感谢所有帮助。

2 个答案:

答案 0 :(得分:1)

您需要每隔N秒检查一次会话。如果会话过期,只需重新加载页面即可。上面的代码检查会话是否每5秒过期一次。

<强> JS

var check_session;
function CheckForSession() {
        var str="chksession=true";
        jQuery.ajax({
                type: "POST",
                url: "sec.php",
                data: str,
                cache: false,
                success: function(res){
                    if(res == "1") {
                    alert('Your session has expired');
                    }
                }
        });
}
check_session = setInterval(CheckForSession, 5000);

<强> sec.php

session_start();
$name = $_SESSION["your_session"];
if($name == '')
{
    //session expired
    echo "1";
} else {
    //session not expired
    echo "0";
}

答案 1 :(得分:0)

Codeigniter有一个用于检测ajax请求的内置方法:

$this->input->is_ajax_request();

你能做的是:

  1. 提出ajax请求

  2. 检查是否is_ajax_request并且未登录

  3. 如果是这样,请发送类似&#34;拒绝&#34;到ajax网站

  4. 如果传入的数据===&#34;被拒绝&#34;

  5. ,则通过javascript进行重定向