【发布时间】:2017-09-30 07:36:06
【问题描述】:
我正在处理一个需要我执行 JS 重定向到页面的项目,方法是通过 AJAX 查询在 PHP 中设置会话变量,然后检查以确保设置了会话。检查成功后,会在 JS 中构造重定向 URL 并执行重定向。
到目前为止我得到的是:
<?php
$v_ip = $_SERVER['REMOTE_ADDR'];
$hash = md5($v_ip);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$.ajax({
type : 'POST',
url : './session.php',
dataType: "json",
data: "<?php echo $hash; ?>",
success : function(data){},
error : function(){}
});
</script>
<script>
<?php
if(isset($_SESSION['allow'])) {
echo "var url = \"url-here/?token=\";
var token = \"token\";
var redirect = url.concat(token);";
}
?>
window.location.replace(redirect);
</script>
</head>
</html>
以及设置变量的 PHP 代码:
<?php
session_start();
$v_ip = $_SERVER['REMOTE_ADDR'];
$hash = md5($v_ip);
if(isset($_POST["$hash"])) {
$_SESSION['allow'] = true;
}
?>
在初次访问该页面时,一切都得到了正确处理,并且一直到实际重定向为止。设置了会话变量,页面代码中正确输出了JS代码,但由于某种奇怪的原因,实际的window.location.replace函数没有激活。该页面仍然是空白的 - 经过检查,源代码正确显示了所有内容,但没有发生重定向。如果我再次访问该页面,则重定向完成。
如果我在两个文件中更改会话变量的名称,并且必须重新设置它,同样的事情会发生 - 在初次访问时,重定向不会被处理,但很明显直到实际重定向之前的一切都是再次正确处理。
为什么会这样?
【问题讨论】:
标签: javascript ajax session redirect var