PHP Session Header不会更改URL

时间:2013-02-14 03:15:00

标签: php redirect header

让标题正常工作有点麻烦。

我只是重新学习PHP,之前从未使用过会话或标题。

我有一个login.php w /一个发布到此文件的表单:

checklogin.php

<?php
ob_start();
$host="localhost"; // Host name 
$username="db"; // Mysql username 
$password="dbpass"; // Mysql password 
$db_name="db"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['username']; 
$mypassword=$_POST['password']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE userName='$myusername' and userPass='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
          session_start();
          $_SESSION['logon'] = true;

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location: app.php");
exit();
}
else {
header("location: login.php");
exit();
}
ob_end_flush();
?>

本质上,这会执行作业,app.php文件会在浏览器窗口中加载,但URL在浏览器窗口中不会更改。该网址仍为http://mysite.com/checklogin.php

这相当于app.php中的任何相关链接(例如app.php#page1)都没有,因为浏览器窗口中的URL仍然列为/checklogin.php

我在这里搜索过几十个问题并且空洞。

我尝试过使用整个网址,指定TRUE并在标题中使用302和303,没有什么能让我摆脱网址。

还要注意,我知道jack蹲下ob_start做了什么 - 这是示例代码 - 此时我所知道的是,如果我删除了ob_start并且它的闭包在最后它不起作用。

3 个答案:

答案 0 :(得分:0)

在header()调用中使用Location而不是location。

还尝试将@放在session_start()之前; 。有时您的会话可能已经启动,并且尝试再次启动它会导致通知/警告,具体取决于主机上的php设置,如果没有输出缓冲,则后面的header()调用无效。将@放在它前面使通知/警告静音,这样header()将再次起作用。

如果可行(@session_start),则不需要ob_start()和ob_end_flush()调用,这只会导致缓冲警告/通知。

答案 1 :(得分:0)

正如@JohnCode所指出的那样,代码需要整个重写才能达到PHP 5.4的速度。

答案 2 :(得分:0)

变化

header("location: abc.php");

header("Location: abc.php");

注意大写字母L.

也最好使用

$_SESSION['myusername']=$myusername;
$_SESSION['mypassword']=$mypassword;

大于

session_register("myusername");
session_register("mypassword");

因为它在PHP 5.3中被删除并在PHP 5.4中被删除 http://www.php.net/manual/en/function.session-register.php