PHP登录并获取用户信息

时间:2010-06-21 12:12:28

标签: php

问题:用户成功登录后如何获取用户信息?

这是我的 login.php 代码

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
  $username = $_POST['username'];
  $password = $_POST['password'];
  // mysql connect function here....
  // mysql query here....
  $sql = "SELECT * FROM user_accounts WHERE username = '$username' and password = '$password'";
  $result = mysql_query($sql);
  $count = mysql_num_rows($result);

  if($count == 1) {
    session_register(username);
    session_register(password);
    header('location: index.php');
  }
  else {
    $error = "Invalid Username or Password Please Try Again";
  }

}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?=$error=?>
Username : <input type="text" name="username">
Password : <input type="password" name="password">
<input type="submit" />
</form>


这是我的 index.php 代码

<?
  session_start();
  if(!session_is_registered(username)){
  header("location:login.php");
  }
$username = session_is_registered(username);
  $password = session_is_registered(password);
echo $username;
  echo $password;
  ?>


示例:这是数据库信息。

User ID  --> 001
Username --> admin
Password --> admin

当我回复 $ username $ password 时,结果为username = 1和密码= 1.我希望结果是username = admin和password = admin。

如何获取记录的用户名和密码?因为我需要它来查询所以我可以得到他/她的名字,姓氏。
我已经得到了这个,但我忘记了怎么做。 =)

非常感谢您的回复。 =)

3 个答案:

答案 0 :(得分:3)

您已经拥有来自POST阵列的用户名和密码,您可以将它们存储在以下会话中:

session_start(); // this will go on top of the page
.........

if($count == 1) {
    session_register(username);
    session_register(password);

    $_SESSION['username'] = $_POST['username']; // store username
    $_SESSION['password'] = $_POST['password']; // store password

    header('location: index.php');
  }
  else {
    $error = "Invalid Username or Password Please Try Again";
  }

稍后你可以得到它们:

echo $_SESSION['username'];
echo $_SESSION['password'];

注意 您应该在会话注销文件中销毁它们。

注意2 session_register自PHP 5.3.0起已被弃用。只需使用$_SESSION数组来存储您的值。

答案 1 :(得分:2)

你正在使用旧的会话功能而你使用它们是错误的。让我告诉你如何使用$ _SESSION数组来完成它。请注意,session_register()和session_is_registered()是从PHP 5.3开始的依赖修复函数,这意味着它们可以在以后删除。此外,当您想在查询中使用它时,您应始终转义来自用户的输入。您可能希望使用预准备语句,PDO或mysqli。

<?php
    // login.php
    session_start();
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        // mysql connect function here.... (moved up here)
        $username = mysql_real_escape_string($_POST['username']);
        $password = mysql_real_escape_string($_POST['password']);
        $sql = "SELECT * FROM user_accounts WHERE username = '$username' AND password = '$password'";
        $result = mysql_query($sql) or die( "MySQL Error: ".mysql_error() );
        $user = mysql_fetch_assoc($result);
        if($user !== false) {
            $_SESSION['username'] = $user['username'];
            $_SESSION['password'] = $user['password'];
            header('Location: index.php');
        } else {
            $error = "Invalid Username or Password Please Try Again";
        }
    }
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?=$error=?>
Username : <input type="text" name="username">
Password : <input type="password" name="password">
<input type="submit" />
</form>

请注意mysql_real_escape_string()函数以及上例中$_SESSION超全局的使用。

<?php
    // index.php
    session_start();
    if(!isset($_SESSION['username'])) {
        header("Location: login.php");
    }
    $username = $_SESSION['username'];
    $password = $_SESSION['password'];
    echo $username;
    echo $password;
?>

您可以使用isset()代替session_is_registered()来检查是否已设置会话值。

答案 2 :(得分:1)

session_is_registered是布尔值,因此它会检查它是否设置为没有得到它。

您需要$username = $_SESSION['username'];

$password= $_SESSION['password'];

尽量不要使用用户名和密码作为会话名称。

我发现它已经是mysql并在会话中存储了mysql用户名和密码

修改

也不推荐使用session_register