我正在尝试在我的网站上实现用户登录系统。我已经创建了注册登录功能,现在我正在尝试使用session来使它只有登录用户才能访问某些页面,我的登录页面的代码如下:
<? session_start(); ?>
<div align="left">
<a href='register.php'>REGISTER <i class="fa fa- user-plus" aria-hidden="true"></i></a>
<?
include('HtmlNavSetupnohome.php');
include('sqlDeets.php')
?>
<link href="css/hawthorne_type1_color1.css" rel="stylesheet">
<link href="css/font-awesome.min.css" rel="stylesheet">
<form action="" method="POST">
<h3>USERNAME:</h3><input id="username" type="text" name="username"/>
<h3>PASSWORD:</h3><input id="password" type="password" name="password"/><br>
<input class="login" type="submit" name="submit" value="Login" />
</form>
<?
include('connect.php');
if (isset($_POST['username']) and isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM user WHERE username='$username' and password='$password'";
$result = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result);
if (isset($_POST['submit'])) {
if ($count == 1) {
$_SESSION['username'] = $username;
} else {
?>
<br>INVALID LOGIN DETAILS<br>
<?
session_destroy();
$_SESSION['username'] = null;
}
}
if (isset($_SESSION['username'])) {
?>
<script type="text/javascript">location.href = 'http://www.bradleyboothman.co/homepage.php';</script>
<?
$_SESSION['username'] = $username;
} else {
}
}
我尝试在每个我想要保护的页面上使用以下内容但没有运气:
<?php
session_start();
if (!isset($_SESSION['username'])) {
// use is not logged in
} else {
// user is logged in
}
知道我做错了什么吗?任何帮助赞赏。
答案 0 :(得分:0)
使用MySQL API计算结果集中的行数似乎是一种流行的方法,但也是这里无穷无尽的问题的来源。我建议你实际上尝试获取一行并且:
如果找到行,则用户有效
否则,它不是
这也允许获取您可能想要使用/显示的其他用户详细信息,例如用户配置文件,全名等。实际上,即使用户名也应显示为存储在DB中,而不是在上次登录时输入。
您的代码可以使用一些改进,但我会给您一些我认为特别有用的建议:删除您当前的学习材料(在线教程,书籍,等等),这是非常过时的,可能不是很好首先,找到更好的东西。至少使用PDO,预处理语句和password_verify()
。生命太短暂,无法学习你不需要的东西。
答案 1 :(得分:0)
如果您想在每次刷新页面时检查SESSION存在,您只需使用if循环来实现它。
<?php
ob_start(); // to make the below header work
if($_SESSION[username]=="")
{
header('Location: index.php'); // Redirect to homepage or Login page
}
else
{
//Do nothing
}
?>
其他选项是,
在用户登录时设置名为 $ _ SESSION [id] 的新SESSION变量。
用户退出时删除该SESSION。
使用if条件检查ID的SESSION是否为空。
if($_SESSION[id]=="")
{
header('Location: index.php');
}
答案 2 :(得分:0)
试试这个
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
/*
$query = "SELECT * FROM user WHERE username='$username' and password='$password'";
$result = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result);
*/
// Let's assume it is 1 (Erase this comment once you test this)
$count = 1;
if (isset($_POST['submit'])) {
if ($count > 0) {
$_SESSION['username'] = $username;
}
else {
echo "<br />INVALID LOGIN DETAILS<br />";
session_destroy();
$_SESSION['username'] = null;
}
}
if (isset($_SESSION['username'])) {
echo "<script type='text/javascript'>location.href = 'http://www.bradleyboothman.co/homepage.php';</script>";
}
else {
}
}
答案 3 :(得分:-1)
我认为它很有效,因为你会在剧本结束时摧毁你的会话