我正在为一个网站构建基于php的登录,该网站恰好在我用Wamp创建的localhost中工作,但如果我将文件复制到远程服务器并在那里设置相同的数据库,它就无法工作 . 与数据库的连接应该没问题,因为我可以在站点上注册一个新用户,该站点还会显示从数据库中取出的所有内容 .
该网站的登录部分的问题在于它根本不做任何事情 . 我尝试登录,如果它具有正确的帐户详细信息,则表示登录成功,并且它还回应会话变量以用于测试目的(例如:它显示保存在数据库中的给定用户的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()添加到多个页面的原因,但它也不能以这种方式工作 .
由于我已经完成了我现在可以做什么的想法,所以我们将非常感谢任何帮助 . 谢谢 .
1 回答
当您收到“已发送标头”错误时,它应指定负责过早输出的文件和行 .
我怀疑在你的一个文件中的PHP结束标记之后你可能有一个尾随空格 . 因为这是一个问题,所以完全省略关闭的PHP标记是个好主意 . PHP解析器不关心,所以你为什么要这样做? :)
一个简单的修复可能只是简单地使用输出缓冲,但在这种情况下它不是必需的 .
您是否检查过是否正在设置cookie?你在哪里打电话
session_destroy()
?session_start()
应该只被调用一次 . 将它推入引导程序文件可能是有意义的,并将其包含在每个页面中 .