带有 PHP 和 SESSION 的登录页面
Posted
技术标签:
【中文标题】带有 PHP 和 SESSION 的登录页面【英文标题】:Login page with PHP and SESSION 【发布时间】:2013-06-09 17:51:45 【问题描述】:我已经为具有用户名和密码的用户创建了一个数据库和一个表。我想用简单的html
和php
创建一个登录页面,但我找不到任何解决我的 PHP 代码问题的方法。所以有登录页面 (index.html)
和 Chklogin.php
和 login_success.php.
当我输入已插入用户表的用户名和密码时,它不会显示 login_success 页面。
这是我的 Chklogin.php 代码:
<?php
$host="localhost"; // Host name
$username="root"; // username
$password="root"; // password
$db_name="TA"; // Database name
$tbl_name="user"; // Table name
mysql_connect("$host", "$username", "$password");
mysql_select_db("$db_name");
$myusername=mysql_real_escape_string($_POST['username']);
$mypassword=mysql_real_escape_string($_POST['password']);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1)
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_start();
$_SESSION['username'] = $myusername;
$_SESSION['password'] = $mypassword;
header("location: login_success.php");
else
echo "Wrong Username or Password";
?>
以及 login_success.php 的代码:
<?php
session_start();
if(!$_SESSION['username'])
header("Location: index.html");
exit;
echo 'Welcome, '.$_SESSION['username'];
header("Location: student-page.html");
?>
【问题讨论】:
您是否在数据库中存储纯文本。 请不要使用mysql_*
函数。它们现在已被弃用!!相反,请使用php.net/manual/en/book.mysqli.php 或php.net/manual/en/book.pdo.php
还有数据放到数据库的哪里,你的数据库结构是什么,里面有什么数据
在文件开头开始会话,标题中的Location
也应该以大写字母开头,我认为它区分大小写(未测试)
@RoyalBg 不区分大小写。
【参考方案1】:
将AND username != '' AND username IS NOT NULL LIMIT 1
添加到您的 SQL 语句中。否则,在某些情况下,有人可能会在没有正确凭据的情况下登录。
session_start()
和 header()
需要放在所有 echo
、print
等输出之前(还有空格)。为什么?会话通常以浏览器的 cookie 开始,cookie 在标头内发送。标头需要在实际有效负载之前。
不要只检查会话中是否存在用户名,而是检查整个登录凭据是否正确。某些会话仍保存在有人可能能够操纵这些会话的位置
将 exit;
放在 header()
之后 - 并非所有客户端都遵循标头信息,在某些情况下,您的脚本可能会继续导致奇怪的效果
为了调试,将error_reporting(E_ALL);
和ini_set('display_errors', true);
放在所有内容之上
【讨论】:
【参考方案2】:你需要检查的东西
1.
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
echo $sql; // Because you have to be sure the query is correct
2.
$count=mysql_num_rows($result);
echo $count; // Because the number can be > 1
or add LIMIT 1 to the query
3.
if($count==1)
echo 'ok'; // to see if everything is okay
4. If all 3 of the above are True then check the path to this file
header("location: login_success.php");
【讨论】:
我尝试添加回显功能,但是当登录时,它显示一个空白页面。它不显示“错误的用户名或密码”或 NULL。以上是关于带有 PHP 和 SESSION 的登录页面的主要内容,如果未能解决你的问题,请参考以下文章