当我尝试显示已登录用户的用户名时,我会收到“欢迎,1”,其中1应该是登录用户的用户名。 这是我在members.php中的代码。注释掉的行也不起作用。
<?php
require_once('include.php');
?>
<?php
// echo "welcome, {$_SESSION['username']}";
$user = $_SESSION['username'];
echo "Welcome $user";
?>
用户已登录,我想知道我是否在检查登录页面中犯了错误。 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'? 非常感谢
答案 0 :(得分: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注入攻击开放的,而是使用prepared statements代替
答案 1 :(得分:0)
在check_login页面中,我看不到 session_start 和用于将用户名保存到会话中的代码,以便您可以在其他页面上检索它。
在check_login页面中,请添加:
session_start();
在开始时然后设置:
$_SESSION['username'] = $username;
以便您可以在另一页上检索并显示它。
答案 2 :(得分:0)
请检查以下几点。
从您的代码中,我没有看到如下所示的行:
$_SESSION['username'] = $username
没有设置,你什么也得不到。
session_start()
变量之前完成了$_SESSION
。 session_start()
是必需的函数。