【问题标题】:Header() redirect shows up in network activities but redirect isn't occuringHeader() 重定向出现在网络活动中,但未发生重定向
【发布时间】:2023-02-25 02:23:08
【问题描述】:

我正在构建一个流程,如果我的用户登陆主页,我会检查是否存在具有特定名称的有效 cookie。如果 cookie 不存在,用户将被重定向到login.php

我向第三方 API 发出 POST 请求以使用 AJAX 和 PHP 代理对用户进行身份验证以绕过任何 CORS 问题。身份验证成功后,我会收到带有 authToken 的响应。我用它来创建一个带有 authToken 的令牌(我不必担心安全问题,特别需要使用 cookie)。然后我将用户重定向回主页。

但是,虽然我看到在我的网络活动中发生了重定向,更具体地说,对状态为 200 的 url 执行了 GET 请求,但实际页面并未在我的浏览器上呈现,因此重定向实际上并未发生。我的控制台或终端上没有收到任何错误。

这是我的主页代码,重定向到登录:

<?php
  session_start();
  if(!isset($_COOKIE['authToken'])){
    header ("location: /login.php");
  } 
?>

用户尝试登录时的 AJAX POST 请求:

    const submitButton = document.getElementsByClassName('login')[0];
    submitButton.addEventListener('click', function(event) {
        event.preventDefault();
        const inputs = document.getElementsByTagName('input')
        const emailAddress = inputs[0].value
        const password = inputs[1].value        
        manageState().validateState();
        data = {
            name:'***',
            password: '***',
            userID: ***,
            userSecret: ***
        }
        console.log('data', data)
        jQuery.ajax({
            type: "POST",
            url: "proxy.php?url=https://***/****",
            dataType: "json",
            contentType: 'application/x-www-form-urlencoded',
            data: data,
            success: function (data){
                console.log('success', data)
            }
        });
    });
}

绕过 CORS 问题的 php 代理:

function makePostRequest($baseURL) {
    global $redirect_url;
    $ch = curl_init();
    $data = http_build_query($_POST);
    curl_setopt($ch, CURLOPT_URL, $baseURL);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);
    curl_close($ch);

    if($e = curl_error($ch)) {
        echo $e;
    } else {
        $json = json_decode($response, true);
        createCookie($json['authToken']);
        header("Location: $redirect_url");
        exit();
    }
}

以及创建 cookie 的函数 createCookie:

function createCookie($token){
    global $redirect_url;
    $cookie_name = 'authToken';
    $cookie_value = strval($token);
    setcookie($cookie_name, $cookie_value, time() + (20), "/"); //86400*30
}

将不胜感激任何帮助

【问题讨论】:

  • 我不认为您可以从 Ajax 调用的 PHP 代码执行标头重定向,可以吗? PHP 代码的输出不会发送到浏览器,它只是返回给调用 JS 代码。

标签: javascript php ajax


【解决方案1】:

你想让我做什么? PHP 中的重定向就像:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: /login.php");

但是 AJAX 不是用于按标题重定向的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多