我是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');
}
}
?>
答案 0 :(得分:1)
您正在使用两个不同的会话变量
ID, Name
==============
1, 'Name1'
1, 'Name1'
1, 'Name1'
2, 'Name2'
2, 'Name2'
vs
isset($_SESSION['user'])
还有两点需要注意:您的SQL字符串非常适合SQL注入,您应该对存储在数据库中的密码进行哈希处理(请检查php函数password_hash
)。
答案 1 :(得分:0)
尝试以下代码:
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');
}