如何防止php会话得到错误的值?

j91ykkif  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(256)

我有一个php站点,当我加载一个页面时,有时会从另一个用户那里获得$\u会话值,但当我刷新页面时,一切正常。
例如,我以用户a的身份登录,浏览站点,然后在页面中从用户b获取会话。我刷新页面并再次从用户a获得正确的信息。
这是一个“db.php”文件,在我的站点中的每个文件中使用一次require\u。我把这个放在我所有剧本的开头:

<?php
    if(!isset($_SESSION)){session_start();}

    $mysqli = new mysqli("localhost", "", "", "");

    if ($mysqli->connect_errno) {
        echo "Error: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }

    $mysqli->set_charset("utf8");

    include("functions.php");
    date_default_timezone_set('America/Mexico_City');
?>

我还使用了一个共享主机,它设置了以下值:

session.gc_maxlifetime = 604800;
session.save_path = /var/cpanel/php/sessions/ea-php56;

我有一个“header.php”需要在每一页一次,有这个查询获得并显示当前用户的用户名。这就是我注意到会话有问题的地方,但我不知道为什么:

$query=sprintf("SELECT * FROM tblusers WHERE user=%s",$_SESSION['ADMINID']);
$info=$mysqli->query($query);
$c=$info->fetch_assoc();

登录是这样完成的。cpass()是一个函数,它对pass进行加密,以便根据数据库对其进行检查。登录完成正常,浏览之后遇到问题:

<?php
    if(isset($_POST['user'])&&isset($_POST['pass'])){
        $user=$mysqli->real_escape_string(trim($_POST['user']));
        $pass=cpass($mysqli->real_escape_string(trim($_POST['pass'])));
        $query=sprintf("SELECT * FROM tblusers WHERE user=%s AND pass='%s'",$user,$pass);
        $check=$mysqli->query($query);
        if($check->num_rows==1){
            $r=$check->fetch_assoc();
            $_SESSION['ADMINID']=$r['userid'];
            session_regenerate_id(true);
            header("Location: /");exit;
        }
    }
?>

注销的处理方式如下:

<?php
    if(!isset($_SESSION)){session_start();}
    $_SESSION=array();
    unset($_SESSION);
    session_unset();
    session_destroy();
    if(isset($_GET['url'])){
        header("Location: ".$_GET['url']);
    }else{
        header("Location: /");
    }
?>

提前谢谢!

w80xi6nr

w80xi6nr1#

简单的修复方法是,当您有一个可以工作的登录脚本时,您可以在它的末尾提供类似这样的内容,以给他们一个 $SESSION 与他们的 userID 在你的数据库里。
登录.php

//login code

.....

//
//if successful
            $_SESSION['user_id'] = $user['username'];
        $_SESSION['logged_in'] = time();

        header( "Location: /home.php" );
        die();

然后在你的主页顶部(我想这是你想要一个回声,就像你是作为'user123'登录的)
主页.php

<?php 
session_start();
if(isset($_SESSION['user_id']) || isset($_SESSION['logged in'])){ 
echo 'whatever you want here'
?>

相关问题