Php 返回空白页的简单登录
我正在学习PHP,我制作了一个简单的登录脚本,但问题是它只会将我重定向到一个空白页面。如果用户凭据正确,它意味着重定向到index.php,但情况显然不是这样?还有验证,因此如果用户输入空白,则返回错误。这似乎没有被执行 login.phpPhp 返回空白页的简单登录,php,Php,我正在学习PHP,我制作了一个简单的登录脚本,但问题是它只会将我重定向到一个空白页面。如果用户凭据正确,它意味着重定向到index.php,但情况显然不是这样?还有验证,因此如果用户输入空白,则返回错误。这似乎没有被执行 login.php <form id="login-form" method="post" action="logininc.php"> <fieldset> <legend>Login </legend> <p
<form id="login-form" method="post" action="logininc.php"> <fieldset>
<legend>Login </legend>
<p>Please enter your username and password to access the administrator's panel</p>
<label for="user"> <input type="text" name="user" placeholder="Type your username here" id="user" /></label>
<label for="password"> <input type="password" name="password" placeholder="Type your password here" id="password" /></label>
<label for="submit"> <input type="submit" class="btn btn-primary"name="submit" id="submit" value="Login" /> </label> </fieldset> </form>
登录
请输入您的用户名和密码以访问管理员面板
logininc.php//我的处理页面
<?php
require_once("assets/configs/db_config.php");
$user=$_POST['user'];
$password=$_POST['password'];
if(isset($_POST['login']))
{
//To ensure that none of the fields are blank when submitting the form if
if($user || $password != NULL)
{
$user = stripslashes($user);
$password = stripslashes($password);
$user = mysqli_real_escape_string($user);
$password = mysqli_real_escape_string($password);
$sql="SELECT * FROM $test_db WHERE user='$user' and password='$password'";
$result=mysqli_query($sql);
$row=mysql_fetch_array($result);
if($row['user'] == $user && $row['password'] == $password)
{
session_start();
$_SESSION['user'] = $user;
$_SESSION['password'] = $password;
$_SESSION['loggedin'] = "true";
header("location:index.php");
}
else
{
print ('<div id="error">Computer says no.</div>');
}
print ('<div id="error">Enter something!</div>');
}
}
?>
index.php//success页面
<?php //module to check logins
session_start();
if(!isset($_SESSION["loggedIn"])){
header("Location: login.php");
exit;
}
Echo 'Congratulations <b>'.$_SESSION['user'].'</b> you successfully logged in!!<br />
Your Password is: <b>'.$_SESSION['password'].'</b><br />
<a href="login.php">Logout</a>';
?>
问题在于if(设置($\u POST['login'])
您从未在表单中设置“登录”条目
你可以做:
if(isset($_POSt["user"]) && isset($_POST["password"])) {
$user=$_POST['user'];
$password=$_POST['password'];
//To ensure that none of the fields are blank when submitting the form if
if($user && $password) {
当您将
if(isset($\u POST['login'])
更改为if(isset($\u POST['submit'])
时会发生什么情况?$row=mysql\u fetch\u array
应该是$row=mysqli\u fetch\u array
正如其他人已经提到的,使用
if(isset($_POST['user']) && isset($_POST['password'])) {
// your code here
}
顺便说一句:使用一个只说“loggedin=true”或“login=yes”等的会话是不安全的
编辑(安全讨论):
密码应始终加密保存(注册):
此外,您可以为每个用户创建一个随机salt(注册),以将您的安全级别设置得更高(注意:hash(hash(hash(…))会降低您的安全级别,因为您在散列过程中丢失了信息)
注意:这只是一个具有高安全级别的(工作)示例登录/检查脚本。尽管如此,这个脚本还是可以改进的(bruteforce、mysqli/prepared语句、在表单中直接哈希密码、安全会话等)首先,提交按钮的名称是“提交”。您正在检查“登录”是否为post
if(isset($_POST['login']))
{
应该是:
if(isset($_POST['submit']))
{
if($user != NULL || $password != NULL)
{
你写了:
if($user || $password != NULL)
{
应该是:
if(isset($_POST['submit']))
{
if($user != NULL || $password != NULL)
{
您使用了mysqli和mysql命令,这不是一个好的实践
$result=mysqli_query($sql);
$row=mysql_fetch_array($result);
而不是
if($row['user'] == $user && $row['password'] == $password)
{
//this code again check for condition which is already checked in the sql statement
最好的做法是写:
if($row->num_rows==1)
{
在index.php中,您已经编写了
if(!isset($_SESSION["loggedIn"])){
应该是的
if(!isset($_SESSION["loggedin"])){
因为您在存储到会话时存储了小写索引。已经给出了正确的答案,但希望对您的检查进行评论。您的条件是如果$user | |$password!=无效的这相当于说$user是否返回true或者$password是否不是NULL。因此,它不会检查是否同时填写了$user和$password。您需要两个由&&连接的独立条件。(&&=两者都必须返回true,| |是其中一个必须返回true)因此它应该是($user!=NULL&&$password!=NULL)U不应该将密码存储为明文。从不..非常好的代码。你可以在会话上进行eloborate吗?不安全?有人可能通过会话操纵或会话劫持登录到你的网站,因为你的会话中检查的信息只显示“true”,它根本不会绑定到任何用户。我同意会话劫持,但是应该如何操作存储在服务器上的会话对象(默认情况下)?实际上,会话不能仅仅由用户自己设置。$_会话的数据保存在服务器本身,由存储为cookie的密钥查找,但是如果您直接通过未筛选的用户输入分配会话,则可以将$_会话['loggedin']=true。因此,我建议总是让事情有点太安全,例如使用安全信息来检查登录的Stistee,你会考虑什么安全信息?或者你会设置什么会话来跟踪已登录的用户?