Получение имени пользователя в сеансе входа в php - PullRequest
2 голосов
/ 05 мая 2011

Я провел много исследований с 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 сессии, использующие одну и ту же переменную?

Мои изменения из учебника:

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: Работает благодаря предложению Gumbo об использовании var_dump();. Что я сделал, я взял все из * check_login.php * и поместил его в admin.php и перешел с array(0){} на array(3) { ["username"]=> string(6) "admin" ["admin"]=> string(6) "admin" ["password"]=> string(5) "************" }.

Спасибо всем за помощь.

Ответы [ 4 ]

6 голосов
/ 05 мая 2011

Есть две вещи не так. Измените все старый на новый . (Сделал так для лучшего форматирования.)

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

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

isset () возвращает логическое значение, а не значение.

Редактировать: Как сказал Гамбо, точка с запятой не нужна после константы ADMIN. Следовательно, есть только две ошибки.

2 голосов
/ 05 мая 2011

isset возвращает только логическое значение в зависимости от того, существует данная переменная или нет;но он не возвращает значение переменной, если оно существует.

Сделайте это вместо:

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
}

И обратите внимание, что вы использовали $_SESSION["name2"], а не $_SESSION["name"] в вашем check_login.php .

0 голосов
/ 05 мая 2011

В check_login.php вы назначаете $ _SESSION ["name2"], но в admin.php вы используете $ _SESSION ["name"]. Кроме того, как уже отмечали другие, вы определяете ADMIN как значение bool, а не как имя пользователя ...

0 голосов
/ 05 мая 2011

Это должно работать:

    <h1>Welcome To Admin Page <?php echo $_SESSION['admin'] ?></h1>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...