在我的网站上发现了一个主要问题。我发现如果我用用户A登录,它有时会有一些登录但实际上并没有。然后我用用户B登录 - >进入网站。我注销然后手动返回到需要登录的URL,它以某种方式与用户A一起进入。似乎我在不同的选项卡上有两个(可能有更多)session_id cookie或者有一个ghost session_id活跃我不知道。在这里拉我的头发。
还发现,假设我有一个用户仪表板和测试页面。随着一点点来回与不同的凭据。我得到这个结果: 仪表板回显用户A的id,测试回应用户B的id或者不是id。我的会话错了怎么办? 使用AJAX完成登录。每页的登录验证都是相同的。
共同功能:
function validateUser($userid) {
session_regenerate_id();
$_SESSION['valid'] = 1;
$_SESSION['usersid'] = $userid;
}
function isLoggedIn() {
if (isset($_SESSION['valid']) && $_SESSION['valid'] == 1) {
return true;
} else {
return false;
}
}
function logout() {
$_SESSION = array();
session_unset();
session_destroy();
}
LOGIN / DB: 登录页面:
session_start();
include 'include_files.php';
if(isLoggedIn()){
header('Location:loginrequiredpage.php');
die();
}
登录页面使用AJAX将用户名/密码发送到使用db函数作为包含文件的控制器php文件。它执行usercheckfunc(),它从db检查用户,然后回应成功或失败回到ajax。
来自db functions - 用户检查功能的一部分
//if user found from db and password hash match
validateUser(**ID FROM DATABASE**);
返回登录页面,如果ajax获得成功消息,JS将用户发送到登录所需的URL。 这里有时会出现神秘感浏览器的行为就像我刚刚登录某处,但登录页面再次加载。有时我可以通过地址栏手动登录所需的页面。有时如果我退出/闲置太久等,并使用不同的用户名/密码登录,我会以错误的用户身份进入。输入为用户A,查看用户B的数据或在页面上回显不同的用户ID或仅在其他页面上回显。
登录需要页面:
<?php
session_start();
require_once 'include_files.php';
if (!isLoggedIn()) {
logout();
header('Location:login.php');
die();
}
echo $_SESSION['usersid'];
测试页面:
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once 'include_files.php';
if (!isLoggedIn()) {
logout();
header('Location:login.php');
die();
}
echo $_SESSION['usersid'];
是否有最好的&#34;管理会话的方式?非常感谢帮助:)
答案 0 :(得分:0)
通过在执行session_start之前手动设置会话cookie参数来解决问题。现在,会话cookie域不会出现意外行为。对不起,不知道为什么它之前做了那个神秘的改变。
此cookie参数将其设置为在整个域上有效。我想在同一个域(不同的应用程序等)上需要不同会话的情况下并不好。但对我来说,这是我需要的治疗补丁。
session_set_cookie_params(0, '/', '.example.com');
session_start();