我是新来的PHP和我面对这个问题,我试图解决这个问题,但无法请需要你的帮助。我想使用户第一次登录,然后访问其他网页,他们不应该直接访问其他网页。当我添加的代码是不是让用户访问其他页面,不登录重定向用户登录,但它不是在传统的方式工作,当我把登录信息像它带回登录页面..对不起打扰这里是代码
<?php
// Start of Login Alert Code
if (!isset($_SESSION['user'])) {
$_SESSION['msg'] = "You must log in first";
header('location: login.php');
}
if (isset($_GET['logout'])) {
session_destroy();
unset($_SESSION['user']);
header("location: login.php");
}
?>
这里是login.php中的代码
<?php
if(isset($_POST['Login']))
{
$user = $_POST['uid'];
$pwd = $_POST['pass'];
$query = "SELECT * FROM users WHERE userid='$user' && password='$pwd'";
$data= mysqli_query($con,$query);
$total = mysqli_num_rows($data);
if($total==1)
{
$_SESSION ['user_id']= $user;
header('location:home.php');
}
else {
header('location:error.php');
}
}
?>
您正在使用两种不同的会话变量
isset($_SESSION['user'])
VS
$_SESSION ['user_id']= $user;
一对夫妇更多的事情需要注意的:你的SQL字符串有完善的SQL注入,你应该哈希存储在数据库中的密码(检查PHP函数password_hash
)。
尝试使用此代码:
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
if ( !isset($_SESSION['user_id']))
{
$_SESSION['msg'] = "You must log in first";
header('location: login.php');
}
if (isset($_GET['logout']))
{
unset($_SESSION['user_id']);
session_destroy();
header("location: login.php");
}
对于的login.php
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
if(isset($_POST['Login']))
{
$user = $_POST['uid'];
$pwd = $_POST['pass'];
$query = "SELECT * FROM users WHERE userid='$user' && password='$pwd'";
$data= mysqli_query($con,$query);
$total = mysqli_num_rows($data);
if($total==1)
{
$_SESSION ['user_id']= $user;
header('location:home.php');
}
}
else
{
header('location:error.php');
}