PHP 标头(位置: ...): 强制地址栏中的 URL 更改

2022-08-30 08:35:33

我目前正在使用带有数据库的PHP会话进行身份验证的移动站点。我有一个登录页面,其中包含一个表单,该表单在提交时转到server_login.php。然后,php 文件创建一些会话数据(存储在 $_SESSION 中),并将用户重定向回索引页:

header("location:../../index.php");

新网页(索引.php)正确加载;但是,当标题重定向页面时,地址栏的URL不会更改;它停留在*http://localhost/php/server/server_login.php*而不是 http://localhost/index.php 因此我无法加载使用相对路径的所有其他资源。就好像网页仍然认为它位于 /php/server 而不是 /。

奇怪的是,我在注销时对 header(“location: ...”)的其他用法.php可以正常工作,并通过 URL 更改成功重定向页面。

我已经确保在标头重定向之前我的*server_login.php*中没有输出(上面只是用于检查的mysql调用),我也使用了ob_start()和ob_end_flush()。

是否有任何方法可以强制更改地址栏上的URL(从而有望解决相对路径问题)?还是我做错了什么?

P/S:我正在使用jQuery Mobile。

编辑:这是我的重定向代码,不会更改URL:

// some other stuff not shown


$sql = "SELECT * FROM $user_table WHERE email = '$myemail' AND password = '$mypassword'";
$login_result = mysql_query($sql, $connection);

$count = mysql_num_rows($login_result);

if ($count == 1) {

    // Successfully verified login information

    session_start();

    if (!isset($_SESSION['is_logged_in'])) {
        $_SESSION['is_logged_in'] = 1;
    }

    if (!isset($_SESSION['email'])) {
        $_SESSION['email'] = $myemail;
    }
    if (!isset($_SESSION['password'])) {
        $_SESSION['password'] = $mypassword;
    }

    // Register user's name and ID
    if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {
        $row = mysql_fetch_assoc($login_result);
        $_SESSION['name'] = $row['name'];
        $_SESSION['user_id'] = $row['user_id'];
    }

    header("Location: http://localhost:8080/meet2eat/index.php");

} else {
    // Not logged in. Redirect back to login page
    header("Location: http://localhost:8080/meet2eat/php/login.php?err=1");

}

答案 1

尝试更改:

header("Location : blabla")
                ^
                |
           (whitespace)

header("Location: blabla")

答案 2

好吧,如果服务器发送正确的重定向标头,浏览器将重定向,因此“更改url”。那么,这可能是浏览器问题。我不知道它是否与它有任何关系,但你不应该在位置标头中发送相对URL(“HTTP / 1.1需要一个绝对URI作为参数»位置:包括方案,主机名和绝对路径,但有些客户端接受相对URI http://php.net/manual/en/function.header.php

header('Location: http://myhost.com/mypage.php');

推荐