我有一个php网站,有时在我加载页面时会从另一个用户那里获得$ _SESSION值,但是当我刷新页面时,一切正常。
例如,我以用户A身份登录,浏览该站点,然后在页面中从用户B获得会话。我刷新页面并再次从用户A获得正确的信息。
这是我站点中每个文件中与require_once一起使用的文件“ db.php”。我把它放在所有脚本的开头:
<?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()是对通行证进行加密以对数据库进行检查的函数。登录成功,在浏览后我遇到了问题:
<?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: /");
}
?>
谢谢!
答案 0 :(得分:1)
简单修复,当登录脚本有效时,您可以在其末尾提供类似的内容,以便为他们提供$SESSION
和他们在数据库中的userID
关联。
Login.php
//login code
.....
//
//if successful
$_SESSION['user_id'] = $user['username'];
$_SESSION['logged_in'] = time();
header( "Location: /home.php" );
die();
然后在首页顶部(我想这是您想要回显的位置,就像您以'user123'身份登录
home.php
<?php
session_start();
if(isset($_SESSION['user_id']) || isset($_SESSION['logged in'])){
echo 'whatever you want here'
?>