错误多用户php


error multi user php

这是一个有3个用户的代码,该代码只为2个用户运行,它处于idLogin=1和idLogin=2的条件下,我不知道为什么在idLogin=3的条件下它不起作用。

<?php
error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
$username = $_POST['username'];
$password = $_POST['password'];
$login = $_POST['login'];
if (isset($login)) {
    $mysqli = new mysqli("localhost", "root", "", "loginda");
    if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    }
    $res = $mysqli->query("SELECT * FROM login where username='$username' and        password='$password'");
    $row = $res->fetch_assoc();
    $idLogin = $row['id_login'];
    $user = $row['username'];
    $pass = $row['password'];
    $type = $row['type_login'];
    if ($user == $username && $pass = $password) {
        session_start();
        if ($idLogin == "1") {
            $_SESSION['mysesi'] = $user;
            $_SESSION['myid'] = $idLogin;
            echo "<script>window.location.assign('admin.php')</script>";
        } elseif ($idLogin == "2") {
            $_SESSION['mysesi'] = $user;
            $_SESSION['myid'] = $idLogin;
            echo "<script>window.location.assign('index.php')</script>";
        } elseif ($idLogin == "3") {
            $_SESSION['mysesi'] = $user;
            $_SESSION['myid'] = $idLogin;
            echo "<script>window.location.assign('index2.php')</script>";
        } else {
        ?>  

这是index2.php 的代码

<?php
session_start();
if (!isset($_SESSION['mysesi']) && !isset($_SESSION['myid'])=='3')
{
 echo "<script>window.location.assign('login.php')</script>";
 }
 ?>
 <!DOCTYPE html>
 <html lang="en">
 ..........
 </html> 

我认为这里可能有错误。。。

if($user==$username && $pass=$password) // here is single `=` sign

它应该像:

 if($user==$username && $pass==$password)  // double `==` for comparasion

我可能错了,但我不认为您可以检查boolisset是否存在$S_SESSSION['myid'],同时在同一if语句中检查其内容。我认为您可能必须首先检查会话是否已设置,然后检查$_SESSION['myid']的值。

试试这个:

if ((!isset($_SESSION['mysesi']) && !isset($_SESSION['myid'])) || $_SESSION['myid'] !='3')
{ 
   echo "<script>window.location.assign('login.php')</script>";
}

您还应该考虑将PDO对象用于MySQL交互。更重要的是,如果你要像现在这样使用mysqli,你需要在MySQL查询中使用它们来净化下面的用户输入。

最后,您不应该将密码以明文形式存储。在将密码存储到数据库中之前,有许多哈希算法可用于对密码进行哈希。不过,PHP5.5及更高版本包含password_hash功能,让您的操作更轻松。