我一直在做很多关于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个会话使用相同的变量?在php登录会话中抓取用户名
我从教程变化:
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) "************" }
。
感谢大家的全力帮助。
您应该删除对strips strips的调用。 'mysqli_real_escape_string'足以防止注入。 – webbiedave 2011-05-04 21:19:42