我有一个简单的问题。
当特定会话过期或销毁时,如何让网页立即重定向到示例www.google.com中的其他网页。
以下是我在PHP中进行会话的方法:
<?PHP
$Logged = $_SESSION['LoggedIn'];
?>
jQuery脚本必须做两件重要的事情:
我是jQuery的新手,所以如果你能帮助我创建这个脚本,我将非常感谢你。
提前致谢!
答案 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在客户端运行。所以策略是:
$.ajax()
或$.get()
)(参见setInterval()
)$_SESSION['LoggedIn']
以下是上述逻辑的非常精炼版本。对于你的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();
?>