如何防止php会话获取错误的值?
我有一个php站点,有时候当我加载一个页面时,会从另一个用户那里获得$\u会话值,但当我刷新页面时,一切都正常 例如,我以用户A的身份登录,浏览站点,然后在一个页面中从用户B获取会话。我刷新页面,再次从用户A获取正确的信息 这是一个文件“db.php”,在我的站点中的每个文件中使用require_一次。我在所有脚本的开头都提到了这一点:如何防止php会话获取错误的值?,php,mysql,session,Php,Mysql,Session,我有一个php站点,有时候当我加载一个页面时,会从另一个用户那里获得$\u会话值,但当我刷新页面时,一切都正常 例如,我以用户A的身份登录,浏览站点,然后在一个页面中从用户B获取会话。我刷新页面,再次从用户A获取正确的信息 这是一个文件“db.php”,在我的站点中的每个文件中使用require_一次。我在所有脚本的开头都提到了这一点: <?php if(!isset($_SESSION)){session_start();} $mysqli = new mysqli("
<?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');
?>
我有一个“header.php”,每个页面需要一次,它有这个查询来获取并显示当前用户的用户名。这就是我注意到会议有问题的地方,但我不知道为什么:
$query=sprintf("SELECT * FROM tblusers WHERE user=%s",$_SESSION['ADMINID']);
$info=$mysqli->query($query);
$c=$info->fetch_assoc();
登录是这样完成的。cpass()是一个函数,它对密码进行加密,以根据数据库检查密码。登录完成正常,浏览后遇到问题:
<?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;
}
}
?>
简单的修复,当您有一个可以工作的登录脚本时,您可以在它的末尾提供类似这样的东西,给他们一个$SESSION
,与数据库中的用户ID
绑定
Login.php
//login code
.....
//
//if successful
$_SESSION['user_id'] = $user['username'];
$_SESSION['logged_in'] = time();
header( "Location: /home.php" );
die();
<?php
session_start();
if(isset($_SESSION['user_id']) || isset($_SESSION['logged in'])){
echo 'whatever you want here'
?>
然后在你的主页顶部(我想这是你想要一个回音的地方,就像你以“user123”登录一样)
home.php
//login code
.....
//
//if successful
$_SESSION['user_id'] = $user['username'];
$_SESSION['logged_in'] = time();
header( "Location: /home.php" );
die();
<?php
session_start();
if(isset($_SESSION['user_id']) || isset($_SESSION['logged in'])){
echo 'whatever you want here'
?>
这听起来不太可能。用户之间不共享会话。也很难看出您认为所显示的代码是否相关。您确定这些错误的数据确实来自会话,而不是错误的数据库查询吗?向我们显示您遇到此问题的页面并给出一些提示更为相关有足够的数据可以让它被复制。你可以调用session_start而不使用if。我想你是在浏览器中缓存了一个页面。另外,我们不知道查询是什么样子,也不知道其他文件使用session。只有在共享主机配置不好的情况下,@ADyson才会在用户之间共享会话(我的帖子)可能..Topicstarter正在使用session.save\u路径,因此他正在保存。