php - 在 php 登录 session 中获取用户名

标签 php mysql authentication security

一段时间以来,我一直在研究 php 登录及其工作原理。几天前我偶然发现了这个网站。 http://www.intechgrity.com/create-login-admin-logout-page-in-php-w/#comment-25300 .看着它我注意到它正在使用 session_register这是 PHP 5.3 中的一个大问题。我开始尝试使用它,登录部分可以正常工作,但由于某种原因,我无法让用户名显示在管理页面的标题中。我想要的是:<h1>Welcome To Admin Page Username</h1>它给了我<h1>Welcome To Admin Page</h1> .我在想是不是因为我有 2 个 session 使用相同的变量?

我对教程的更改:

check_login.php -

    <?php
define(DOC_ROOT,dirname(__FILE__)); // To properly get the config.php file
$username = $_POST['username']; //Set UserName
$password = $_POST['password']; //Set Password
$msg ='';
if(isset($username, $password)) {
    ob_start();
    include(DOC_ROOT.'/config.php'); //Initiate the MySQL connection
    // To protect MySQL injection (more detail about MySQL injection)
    $myusername = stripslashes($username);
    $mypassword = stripslashes($password);
    $myusername = mysqli_real_escape_string($dbC, $myusername);
    $mypassword = mysqli_real_escape_string($dbC, $mypassword);
    $sql="SELECT * FROM login_admin WHERE user_name='$myusername' and user_pass=SHA('$mypassword')";
    $result=mysqli_query($dbC, $sql);
    // Mysql_num_row is counting table row
    $count=mysqli_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 "admin.php" 
        $_SESSION["admin"]= $myusername;
        $_SESSION["password"]= $mypassword;
        $_SESSION["name"]= $myusername;
        header("location:admin.php");
    }
    else {
        $msg = "Wrong Username or Password. Please retry";
        header("location:login.php?msg=$msg");
    }
    ob_end_flush();
}
else {
    header("location:login.php?msg=Please enter some username and password");
}
?>

admin.php -

<?php
session_start(); //Start the session
define(ADMIN,isset($_SESSION["name"])); //Get the user name from the previously registered super global variable
if(isset($_SESSION["admin"])){ //If session not registered
header("location:login.php"); // Redirect to login.php page
}
else //Continue to current page
header( 'Content-Type: text/html; charset=utf-8' );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Welcome To Admin Page Demonstration</title>
</head>
<body>
    <h1>Welcome To Admin Page <?php echo ADMIN /*Echo the username */ ?></h1>
    <p><a href="logout.php">Logout</a></p> <!-- A link for the logout page -->
    <p>Put Admin Contents</p>
</body>
</html>

这些是我所做更改的仅有的 2 个页面。感谢您的帮助。

更新:我厌倦了每个回答的人所做的更改,但仍然是一片空白。我只想放弃它。令我困惑的是它如何使用旧代码而不是新代码。感谢所有帮助。

更新 2:感谢 Gumbo 关于使用 var_dump(); 的建议,它开始工作了.我所做的是从 *check_login.php* 中获取所有内容并将其放入 admin.php 并从 array(0){} 开始至 array(3) { ["username"]=> string(6) "admin" ["admin"]=> string(6) "admin" ["password"]=> string(5) "************" } .

感谢大家的帮助。

最佳答案

有两点不对。将所有 更改为。 (这样做是为了更好的格式化。)

define(ADMIN,isset($_SESSION["name"])); //old
define(ADMIN,$_SESSION["name"]); //new

$_SESSION["name2"]= $myusername; //old
$_SESSION["name"]= $myusername; //new

isset()返回一个 bool 值,而不是值。

编辑:如 Gumbo 所述,常量 ADMIN 后不需要分号。因此,只有两个错误。

关于php - 在 php 登录 session 中获取用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5889937/

相关文章:

authentication - 提交 "Test notes"或“说明 WP8 应用程序提交 - 我在哪里可以找到它们?

php - Laravel Eloquent 与逗号分隔时间戳之间的关系?

php - 如何更改 PHP 中现有时间戳的时区?

c# - OpenID 连接与 ASP.NET MVC

java - 在刷新 token 上找不到 AuthenticationProvider - Spring OAuth2 java 配置

mysql - 如何将数据添加到现有表中的特定列?

php - ORM 和 php 过滤掉数据库中的日期

php - Laravel 5 : How to enable environment based public resources like css, js,图像

php - 如何将json对象插入到mysql表中

mysql - 如何从字段中拆分一系列文本,然后分别选择每个文本?