jQuery - 在会话过期或销毁时立即重定向

时间:2015-01-29 22:50:33

标签: javascript php jquery

我有一个简单的问题。

当特定会话过期或销毁时,如何让网页立即重定向到示例www.google.com中的其他网页。

以下是我在PHP中进行会话的方法:

<?PHP
$Logged = $_SESSION['LoggedIn'];
?>

jQuery脚本必须做两件重要的事情:

  1. 如果脚本正在侦听的页面上没有任何刷新/重新加载,那么当会话被破坏时,例如从浏览器中的另一个选项卡中进行重定向,或者会话已经过了一段时间。
  2. 例如,脚本必须每隔5秒进行一次检查。
  3. 我是jQuery的新手,所以如果你能帮助我创建这个脚本,我将非常感谢你。

    提前致谢!

4 个答案:

答案 0 :(得分:1)

您可以使用AJAX进行检查

jQuery代码 - YourPanelPage.php

<script type="text/javascript">
function session_checking()
{
    $.post("ajax-session.php", function(data) {
        if(data == "-1")
        {
            alert("Your session has been expired!");
            location.reload(); // or window.location = "http://www.redirect.com";
        }
    });
}
var validateSession = setInterval(session_checking, 5000);
</script>

此jQuery触发器 session_checking 每5秒启动一次,如果会话过期,它将显示警告并重新加载

用于检查会话的PHP代码 - ajax-session.php

<?php
session_start();
if(!isset( $_SESSION['LoggedIn']) || $_SESSION['LoggedIn'] == false)
{
    //expired
    echo "-1";
    session_destroy();
}
else
{
    //not expired
    echo "1";
}
?>

答案 1 :(得分:0)

您可以设置间隔并每隔5秒检查一次会话,如下所示:

setInterval (function(){
    //your code for checking session goes here
    if(isSessionExpired){
        window.location.href='http://www.google.com';
    }
}, 5000 );

答案 2 :(得分:0)

您需要创建一个验证并返回一些JSON的PHP页面(抱歉,我的开发人员无法帮助您)

然后你可以做这样的事情,我从我们更详细的应用程序中提取它,它可能会有一些错误。如果有,请告诉我。这个有点不同,因为它看到用户是否仍然在网站上活动,但你可以调整它为你工作。

这个的美妙之处在于你可以将它与iframe一起使用。

var SessionManager = function ()
{
    // Properties
    this.sessionIdle = 0;
    this.persister = null;
};

// Method to reset the persister
SessionManager.prototype.PersistSession = function ()
{
    this.sessionIdle = 0;
};

SessionManager.prototype.Poll = function ()
{
    return $.getJSON("/Services/UtilityService.ashx?action=validateSession&__=" + new Date().toString(),
        function (data)
        {
            if (window.top.session.sessionIdle >= parseInt(data.sessionTimeout, 10))
            {
                window.top.location = '/SignOut.aspx?a=true';
            }
            else
            {
                window.top.session.sessionIdle++;
                window.top.session.persister = window.top.setTimeout(window.top.session.Poll, 60000);
            }
        }
    );
};

if (window.self === window.top)
{
    window.top.session = new SessionManager();
    window.top.session.Poll();
}
else
{
    window.top.session.PersistSession();
}

答案 3 :(得分:0)

请注意,$_SESSION对象存储在服务器上,JS在客户端运行。所以策略是:

  1. 使用JS运行一个从客户端进行AJAX调用的函数(请参阅$.ajax()$.get())(参见setInterval()
  2. 在服务器端,使用PHP,检查是否存在$_SESSION['LoggedIn']
  3. 将结果返回给客户
  4. 使用JS解析结果,然后确定是否应重定向用户
  5. 以下是上述逻辑的非常精炼版本。对于你的JS,我选择使用jQuery轻松实现跨浏览器兼容的AJAX调用:

    $(function() {
        var check = function() {
            // Make AJAX call
            var call = $.get('/path/to/php/file');
    
            // Check returned promise 
            call
            .done(function(data){ 
                if(!data.loggedIn) window.location.href='http://www.google.com';
            });
        }
    
        var interval = setInterval(check, 5000);
    });
    

    对于你的PHP:

    <?php
        // Start session
        session_start();
    
        // Array to return
        $return = [];
    
        // Check whether the session variable "LoggedIn" is present or not
        if(!isset($_SESSION['LoggedIn']) || (trim($_SESSION['LoggedIn']) == '')) {
            $return['loggedIn'] = false;
        } else {
            $return['loggedIn'] = true;
        }
    
        // Echo response in JSON format and close session
        echo json_encode($return);
        session_write_close();
    ?>