繁体   English   中英

POST 后的 PHP 重定向

[英]PHP redirect after POST

我正在使用谷歌登录,并且大部分时间都在那里。 用户成功登录,我可以访问我的 mysql 用户表来查找用户记录。 在完成用户处理并设置 $_SESSION 变量后,我想从 POST 页面重定向回我的 index.php 页面。 我知道 POST 页面正在执行,但重定向不起作用,我没有看到任何错误(例如“无法修改标头信息 - 标头已发送”。

login.php 包含 google 登录按钮并在 includes/oauth.js 中调用一个 js 函数

...
    <script src="https://apis.google.com/js/platform.js" async defer></script>
    <script src="includes/oauth.js"></script>
</head>
<body>
    <div id="content">
    <div class="g-signin2" data-longtitle="true" data-onsuccess="onSignIn"></div>
...

onSignIn 函数负责登录过程并检索用户详细信息。 它还准备 POST 调用,包括身份验证令牌

...
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'includes/oauth.php');
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send('idtoken=' + id_token);
...

include/oauth.php 文件获取令牌并对其进行验证。 获取用户 ID,在我的数据库中查找并准备会话变量。 在这一点上,它应该重定向,但没有。 我难住了。 这是因为我在 POST 中使用了 XMLHttpRequest() 吗?

<?php
session_start();
...
if (isset($_POST['idtoken'])){
...
                $_SESSION["auth"] = true;
                $_SESSION["userId"] = $row['id'];
                $_SESSION["userName"] = $row['name'];
                header("Location: ../index.php");
                exit();
}
...

完美的! 谢谢,@Barmar。

我更新了includes/oauth.js文件如下”

var xhr = new XMLHttpRequest();
    xhr.open('POST', 'includes/oauth.php');
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.onreadystatechange = function() {
        window.location = "../index.php";
    xhr.send('idtoken=' + id_token);

现在一切正常!

(我没有足够的代表来评论,所以如果我能弄清楚,我会编辑这个答案)

但重定向不起作用,我没有看到任何错误(例如“无法修改标头信息 - 标头已发送”。

那么最终会发生什么?

也许,页面是否继续加载/处理并且没有结束? 我正在研究一个类似的 Cookie/post 相关问题,它可能是一个类似的解决方案。 就我而言,我必须使用cookie_write_close()因为我会设置取决于当前session_start()上下文的 cookie。 在添加cookie_write_close()之前,php 进程将保持打开状态并且不会发生重定向加载。 相反,页面将根据服务器超时设置超时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM