带有 PHP 和 SESSION 的登录页面

Posted

技术标签:

【中文标题】带有 PHP 和 SESSION 的登录页面【英文标题】:Login page with PHP and SESSION 【发布时间】:2013-06-09 17:51:45 【问题描述】:

我已经为具有用户名和密码的用户创建了一个数据库和一个表。我想用简单的htmlphp 创建一个登录页面,但我找不到任何解决我的 PHP 代码问题的方法。所以有登录页面 (index.html)Chklogin.phplogin_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() 需要放在所有 echoprint 等输出之前(还有空格)。为什么?会话通常以浏览器的 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 的登录页面的主要内容,如果未能解决你的问题,请参考以下文章

php怎样在首页显示登录昵称

与 session_start() 相关的登录时开始但在其他页面上不起作用

与 php 中的 session_start() 相关

一个小的登录查看的session案例

带有 HTML 的 PHP 会话

用户未登录或Session超时时重定向到登录页,不那么简单