0

我的主页上有两个输入框,一个用于用户名,一个用于密码。我有一个 php 文件,它将检查我的数据库以检查这些凭据并允许或拒绝访问。当用户获得访问权限时,我想在我的屏幕上显示,登录为:....“在主页上输入的用户名登录”....

这是我的代码,它检查我的数据库以允许或拒绝访问。

<?php

$host="localhost"; // Host name 
$username="********"; // Mysql username 
$password="********"; // Mysql password 
$db_name="db?K1012904"; // Database name 
$tbl_name="AdminUser"; // 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");

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// 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 password='$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){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:loginsuccess.php");
}
else {
echo "Wrong Username or Password"; 
}
?>

这是用户输入凭据的地方

 <form name="form1" class="navbar-form pull-right" method="post" action="checklogin.php">
          <input name="myusername"  type="text"  id="myusername" placeholder="Email">
          <input name="mypassword" id="mypassword" class="span2" type="text" placeholder="Password">
          <button type="submit" name="submit"class="btn">Sign in</button>
        </form>

这是我试图显示用户名的地方

        <p class="navbar-text pull-right">
    Logged in as: <?php echo $myusername ?> </p>

我的问题是我似乎无法显示用户输入的用户名,关于如何让它工作的任何想法?

4

5 回答 5

1

您将用户名存储在数据库中,只需在会话中存储一个 user_id:

$_SESSION['user_id'] = // whatever the logged in user's id ends up being.

然后,在任何后续页面上,拉取该 user_id,并在数据库上运行 select 以查找其他客户端信息。数据库应该是您的用户数据的规范来源,而不是 $_SESSION,除了“已登录”数据库 id 标识符,否则会导致问题。

顺便说一句,您希望研究存储过程和PDO 绑定查询以保护您的生活,因为 mysql_query 是老式的且已弃用。同样,stripslashes() 是一个坏信号。哦,你使用的是明文密码。

所以,总的来说,问问自己是否真的想编写自己的登录安全系统并重新审视每个人在这样做时遇到的所有安全标准问题?相反,请研究一个开源身份验证项目对这个反复解决的问题的解决方案。这是在github上搜索php身份验证,以867结果开始,而不是自己滚动,不建议安全经验不足的人使用。

另请参阅: http ://pear.php.net/packages.php?catpid=1 Pear Auth 类 https://github.com/Kausheel/Authentication Github Auth Repository to crib from

于 2013-03-21T16:33:25.457 回答
1

session_register在 php 5.3 中已弃用并从 php 5.4 中删除,因此您的会话代码可能根本不起作用。

您应该将session_start();使用会话的每个页面放在顶部并分配变量,例如:

$_SESSION['myusername'] = $myusername;

然后,您可以像这样访问它:

echo $_SESSION['myusername'];

在开始会话的页面上。

于 2013-03-21T16:35:54.760 回答
0

你应该把

session_start();

session_register();
于 2013-03-21T16:36:00.490 回答
0

您使用的一些方法已被弃用,但仍应有效。

您正在设置一个名为 myusername 的会话变量,它存储用户的用户名。因此,一旦在您想要回显当前用户名的页面上,您就会想要回显变量 $_SESSION['myusername']。

例如

<p class="navbar-text pull-right">
Logged in as: <?php echo $_SESSION['myusername']; ?> </p>

我可能是错的,但我相信这会好的。

于 2013-03-21T16:36:03.233 回答
0

您可以在登录时将数据存储在会话变量中

session_start();
...
$_SESSION['user_name'] = $user_name; $_SESSION['user_id'] = $user_id;

但不要忘记在注销时使用session_destroy()销毁会话变量

于 2013-03-21T16:37:22.037 回答