让标题正常工作有点麻烦。
我只是重新学习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并且它的闭包在最后它不起作用。
答案 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