问题:用户成功登录后如何获取用户信息?
这是我的 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。
如何获取记录的用户名和密码?因为我需要它来查询所以我可以得到他/她的名字,姓氏。
我已经得到了这个,但我忘记了怎么做。 =)
非常感谢您的回复。 =)
答案 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