[英]Grabing the username in a php login session
一段時間以來,我一直在對 php 登錄以及它們如何工作進行大量研究。 幾天前我偶然發現了這個網站。 http://www.intechgrity.com/create-login-admin-logout-page-in-php-w/#comment-25300 。 看着它,我注意到它正在使用session_register
,這是 PHP 5.3 中的一個大問題。 我開始玩它,我的登錄部分沒有問題,但由於某種原因,我無法在管理頁面的 header 中顯示用戶名。 我想要的是: <h1>Welcome To Admin Page Username</h1>
它給了我<h1>Welcome To Admin Page</h1>
。 我想知道是不是因為我有 2 個會話使用相同的 var?
我對教程的更改:
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()返回 boolean,而不是值。
編輯:正如 Gumbo 所說,在常量 ADMIN 之后不需要分號。 因此,只有兩個錯誤。
isset
僅返回 boolean 值,具體取決於給定變量是否存在; 但如果它存在,它不會返回變量值。
改為這樣做:
session_start(); // Start the session
if (!isset($_SESSION["admin"])) { // If session not registered
header("location:login.php"); // Redirect to login.php page
exit; // Stop execution of current script
} else {
header('Content-Type: text/html; charset=utf-8');
define('ADMIN', $_SESSION["name"]); //Get the user name from the previously registered super global variable
}
請注意,您在check_login.php中使用$_SESSION["name2"]
而不是$_SESSION["name"]
。
這應該有效:
<h1>Welcome To Admin Page <?php echo $_SESSION['admin'] ?></h1>
在 check_login.php 中,您正在分配 $_SESSION["name2"],但在 admin.php 中,您使用的是 $_SESSION["name"]。 此外,正如其他人已經指出的那樣,您將 ADMIN 定義為布爾值而不是用戶名......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.