我有一个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: /");
}
?>
提前谢谢!
1条答案
按热度按时间w80xi6nr1#
简单的修复方法是,当您有一个可以工作的登录脚本时,您可以在它的末尾提供类似这样的内容,以给他们一个
$SESSION
与他们的userID
在你的数据库里。登录.php
然后在你的主页顶部(我想这是你想要一个回声,就像你是作为'user123'登录的)
主页.php