【发布时间】:2011-11-20 00:09:51
【问题描述】:
我目前正在使用带有数据库的 PHP 会话进行身份验证的移动网站。 我有一个登录页面,其中包含提交时转到 server_login.php 的表单。 php 文件然后创建一些会话数据(存储在 $_SESSION 中),并将用户重定向回索引页面:
header("location:../../index.php");
新网页(index.php)正确加载;但是,当header重定向页面时,地址栏的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。
编辑:这是我的不更改 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");
}
【问题讨论】:
-
你能展示一下你如何发布数据的代码吗?
标签: php redirect header location