PHP标题(位置:...):强制地址栏中的URL更改
我目前正在使用带有数据库的PHP会话进行身份验证的移动网站上工作。 我有一个登录页面,其中有一个表单提交到server_login.php 。 php文件然后创建一些会话数据(存储在$ _SESSION中),并将用户重定向回索引页面:
header("location:../../index.php");
新网页(index.php)正确加载; 但是,当标题重定向页面时,地址栏中的URL不会更改; 它停留在* http://localhost/php/server/server_login.php*而不是http://localhost/index.php,因此我所有使用相对路径的其他资源都无法加载。 就好像该网页仍然认为它驻留在/ php / server而不是/。
奇怪的是,我在logout.php中使用了header(“location:...”),并且使用URL更改成功重定向页面。
我已经确认在我的* server_login.php *中没有输出,在标题重定向之前(上面只是mysql调用检查),我也使用了ob_start()和ob_end_flush()。
是否有任何强制地址栏上的URL更改的方法(并希望修复相对路径问题)? 或者我做错了什么?
P / S:我正在使用jQuery Mobile。
编辑:这是我的代码重定向,不会更改网址:
// 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");
}
尝试改变:
header("Location : blabla")
^
|
(whitespace)
至
header("Location: blabla")
那么,如果服务器发送正确的重定向头,浏览器将重定向,因此“更改网址”。 那么这可能是一个浏览器问题。 我不知道它是否与它有关,但是你不应该在位置标题中发送一个相对URL(“HTTP / 1.1需要一个绝对URI作为参数来指向»Location:包括方案,主机名和绝对路径,但有些客户接受相对URI“,http://php.net/manual/en/function.header.php)和”location“必须大写,如:
header('Location: http://myhost.com/mypage.php');
在你的表单元素中添加data-ajax="false"
。 我有使用jQuery手机相同的问题。
上一篇: PHP header(Location: ...): Force URL change in address bar
下一篇: PHP Header Location gets sent even inside an output buffer?