0

当我尝试显示登录用户的用户名时,我得到“欢迎,1”,其中 1 应该是登录用户的用户名。这是我在 members.php 中的代码。注释掉的行也不起作用。

<?php
require_once('include.php');
?>
<?php
// echo "welcome, {$_SESSION['username']}";     
$user = $_SESSION['username'];

echo "Welcome $user";

?>

用户已登录,不知道是不是我在check-login页面出错了。check_login 页面的代码是:

<?php 
require_once('include.php');

$username = trim($_POST['user']);
$password = trim($_POST['pass']);

$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

$sql="SELECT * FROM user WHERE username='$username' and password='$password';";
$result = mysql_query($sql);

$count = mysql_num_rows($result);

if($count !== 0){

$_SESSION['logged-in'] = true;
header("location:members.php?user=$username");
exit; 
}
else {
$_SESSION['logged-in'] = false;
header("location:login_again.php");
exit;
}
?>

成功登录后重定向到 members.php 页面。有人知道为什么用户名每次都是“1”吗?非常感谢

4

3 回答 3

1

session_start()代码顶部必须有一个地方

<?php session_start();
require_once('include.php');
?>
<?php
// echo "welcome, {$_SESSION['username']}";     
$user = $_SESSION['username'];

echo "Welcome $user";

?>

您还需要在访问它之前session_start在此文件顶部进行设置

if($count>0){
$_SESSION['username']=$username;
$_SESSION['logged-in'] = true;
header("location:members.php?user=$username");
exit; 
}

您的代码对 sql 注入攻击是开放的,请改用准备好的语句

于 2013-05-17T19:04:55.993 回答
0

在您的 check_login 页面中,我看不到session_start和将用户名保存到会话中的代码,以便您可以在其他页面上检索它。

在 check_login 页面请添加:

session_start();

在开始,然后设置:

$_SESSION['username'] = $username;

以便您可以检索并在其他页面上显示它。

于 2013-05-17T19:08:52.763 回答
0

请检查以下几点。

  • 确保在 Session 变量中设置用户名。

从您的代码中,我看不到任何类似以下的行:

$_SESSION['username'] = $username

没有设置,你什么也得不到。

  • 如果你session_start()在使用$_SESSION变量之前做过。

session_start()如果要使用 $_SESSION 变量,则需要调用函数。

于 2013-05-17T19:40:43.023 回答