我目前正在为一个网站构建一个基于php的登录,该网站恰好在我用Wamp创建的本地主机中运行,但如果我将文件复制到远程服务器并在那里设置相同的数据库,它就不起作用。与数据库的连接应该是可以的,因为我可以在网站上注册一个新用户,网站也会显示要从数据库中删除的所有内容。
该网站的登录部分的问题在于它根本不做任何事情。我尝试登录,如果它有正确的帐户详细信息,它会说登录成功,并且它还会为了测试目的而回显会话变量(例如:它显示保存在数据库中的给定用户的ID)。但当我导航到另一个页面时,用户根本没有登录。我将尝试在这里列出所有应该很重要的代码,看看问题出在哪里:
登录表单:
<form action="submit.php" method="POST" id="loginForm">
<fieldset>
<table id="form_Table">
<tr>
<td><label for="login_Username">Username</label></td>
<td><input type="text" name="login_Username" id="login_Username" class="" /></td>
</tr>
<tr>
<td><label for="login_Password">Password</label></td>
<td><input type="password" name="login_Password" id="login_Password" class="" /></td>
</tr>
</table>
<p class="submit"><input type="submit" name="login_Submit" value="Log in" /></p>
</fieldset>
</form>
处理submit.php中登录过程的php代码:
if (isset($_POST['login_Submit'])) {
if (!empty($_POST['login_Username']) && !empty($_POST['login_Password'])) {
$username = mysql_real_escape_string($_POST['login_Username']);
$password = md5(mysql_real_escape_string($_POST['login_Password']));
$sql = "SELECT * FROM `users` WHERE `username` = '$username' AND `password` = '$password'";
$checklogin = mysql_query($sql);
$result = mysql_query($sql);
if($result === FALSE) {
die(mysql_error());
}
if(mysql_num_rows($checklogin) == "1") {
$row = mysql_fetch_array($checklogin);
$group = $row['group'];
$userid = $row['id'];
$cart = array();
$_SESSION['Username'] = $username;
$_SESSION['Group'] = $group;
$_SESSION['UserID'] = $userid;
$_SESSION['LoggedIn'] = 1;
$_SESSION['cart'] = $cart;
echo '<h1>Logged in successfully!</h1>';
//echo '<meta http-equiv="refresh" content="1;index.php">';
echo $_SESSION['Username'];
echo $_SESSION['LoggedIn'];
echo $_SESSION['UserID'];
echo $_SESSION['Group'];
} else {
echo '<h1>Wrong username or password!</h1>';
}
}
}
index.php:
<?php
@session_start();
include 'header.php';
?>
connection.php:
<?php
@session_start();
//connect variables are here
mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL connection error: " . mysql_error());
mysql_select_db($dbname) or die("MySQL database error: " . mysql_error());
mysql_query('SET NAMES utf8');
?>
header.php:
<?php include 'connection.php';
@session_start();?>
我的最佳猜测是,由于某种原因,在我离开给定页面后,网站没有保留会话变量,这就是为什么我将@session_start()添加到多个页面,但它也不能以这种方式工作。
由于我现在已经没有办法做什么了,任何帮助都将不胜感激。非常感谢。
当您收到"headers already sended"错误时,它应该指定导致过早输出的文件和行。
我怀疑您的一个文件中的PHP结束标记后面可能有一个尾随空格。因为这是一个问题,所以最好完全省略结束PHP标记。PHP解析器不在乎,那么你为什么要这样做呢?:)
一个简单的修复方法可能是简单地使用输出缓冲,但在这种情况下不应该是必要的。
你检查过是否正在设置cookie吗?你在哪里打session_destroy()
?session_start()
应该只被调用一次。将其放入引导文件中,并将其包含在每个页面中,这可能是有意义的。