我的$ _SESSION设置脚本中有这个
<?php
//----------------------// Start session----------------------
if(!isset($_SESSION))
{
session_start();
}
//------------------------------------------------------------
//------------------// Check if Username $_SESSION is set------------------------------------------
if (!$_SESSION['Username']) { // If not current User
header("Location: ./logout.php"); // Session destroy file that leads to session logout landing page
exit();
}
//------------------------------------------------------------
?>
现在,我基本上要做的只是检查是否设置了用户名SESSION。但是,在让另一个用户通过时,我发现一些奇怪的事情:
如果我们同时单击相同的链接并同时到达登录页面,我注意到我可以在自己的PC上看到我的用户名显示为他的用户名,他的个人数据(如电子邮件和电话)替换了我的!这对我来说真的很奇怪,因为我们甚至没有住在同一国家,甚至没有共享同一台PC。
因此,很明显,我没有确保SESSION的安全,并且在考虑安全性的情况下使用了一种security脚的方法,这可能被劫持的SESSIONS滥用。
如何解决此冲突?如果两个或更多用户同时访问同一资源,如何将每个登录用户限制为特定会话,而不会发生冲突?我需要帮助。我发现了我就睡不着。
在阅读您的回答后,我现在将显示一个functions.php文件的片段,该文件输出来自DB的Use数据。
首先,我使用以下方法从会话中获取UserName值:
$UserName = $_SESSION['Username'];
使用此值,我查询数据库以获取更多用户详细信息:
//------------Get User Info -- All user column
$Get_User_Info = mysqli_query($conn,"SELECT * FROM customers WHERE User='$UserName'");
/************************************************************/
/************************************************************/
$Get_User_Info_row = mysqli_fetch_array($Get_User_Info,MYSQLI_ASSOC);
/************************************************************/
//---- Now list all user rows
$GLOBALS['Skype'] = $Get_User_Info_row['Skype'];
$GLOBALS['Jabber'] = $Get_User_Info_row['Jabber'];
$GLOBALS['ICQ'] = $Get_User_Info_row['ICQ'];
$GLOBALS['Join_Date'] = $Get_User_Info_row['Join_Date'];
$GLOBALS['Join_Date_Time'] = $Get_User_Info_row['Join_Date_Time'];
$GLOBALS['Balance'] = number_format($Get_User_Info_row['Balance'],2);
以上是我需要保护的每个页面所需要的functions.php中包含的内容。
如您所见,我几乎看不到我在那里做得太多错了。