PHP 会话问题要么循环过多,要么不起作用


php session issue either too many loops or doesn't work

我知道需要

一些安全性的登录脚本,一旦它起作用,我就会这样做,我可以登录,直到我将会话信息添加到管理页面顶部,然后显示登录.php或得到浏览器错误太多重定向循环。

需要登录b.php 是这个文件名

   <?php
   //calling connection to database
   include "connection.php";
   //start session
   //session_start();
   //if user posts for called login
   if(isset($_POST['login'])){
   //declaring variables for user input and using escape string to protect    php scripts
   $user = mysqli_real_escape_string($dbconn,$_POST['user']);
   $pass = mysqli_real_escape_string($dbconn,$_POST['pass']);
   //select from users table where user input matches un and pw
   $sel_user = "SELECT * from users where un='$user' AND pw='$pass'";
   //put content held in sel_user into variable run_user
   $run_user = mysqli_query($dbconn, $sel_user);
  //use run_user counting rows and save in check_user
   $check_user = mysqli_num_rows($run_user);
   //if content row numbers greater than 0 
     if($check_user>0)
     {
  //create session named username that is equal to content of $user
  $_SESSION['user']=$user;
  //display admin main page
     header('Location: ../adminmain.php');
   }
   else {
   //display log in error page
      header('Location: ../loginerror.php');
   }
   }
   //close database connection
   mysqli_close($dbconn);
   ?>

管理页面顶部的会话,其中有很多注释,因为尝试的次数多了!管理员.php是这个文件名

   <?php
    session_start();
    include 'includes/loginrequiredb.php';
    if(!isset($_SESSION['user'])==' '){
    header("location: login.php");
    //}else {
    //session_destroy();
    //header("location: adminmain.php");
    //die();
    }
    ?>

这种说法永远行不通。

您正在检查 $_SESSION 中是否存在"用户"(真或假)== ' '。真或假永远不会 == ' ',因此您将始终重定向到您的其他脚本。

if(!isset($_SESSION['user'])==' '){

将其更改为:

if(!isset($_SESSION['user'])){

常规工作流应如下所示:

  1. 用户点击登录页面
  2. 用户提交凭据 -> 发布给自己
  3. 登录页面检测已输入凭据并对其进行验证
  4. 有效凭据将用户发送到"admin"脚本(并且每次调用都需要重新验证凭据)
  5. 无效的凭据会将用户发送回登录页面。