PHP $_SESSION 一次为多个用户

2022-08-30 14:15:35

我想知道 $_SESSION 数组是如何工作的。如果我有很多用户使用我的网站,我需要为每个用户设置一个子数组吗?例如,现在我有

$_SESSION['userid'] = $userid;
$_SESSION['sessionid'] = $sessionid;
$_SESSION['ipaddress'] = $ipaddress;

但是为了应对更多的用户,我需要制作一个多维数组吗?

$_SESSION[$userid]['sessionid'] = $sessionid;
$_SESSION[$userid]['ipaddress'] = $ipaddress;

$_SESSION 全局处理是按客户端处理还是仅按整体处理?在登录时设置 $_SESSION['userid'] 是否会将前一个用户踢出并状态最新登录的用户?


答案 1

不。为每个用户创建一个单独的。这一切都是由服务器完成的,你不必担心。编写代码时,请将 视为站点上只有一个用户。$_SESSION$_SESSION

编辑:实际上,仔细想想,这是一个非常好的问题。问这类问题是件好事,这意味着你正在认真思考你的代码是如何真正工作的。继续问这些事情,并继续测试。我有一种感觉,有一天你会写出一些惊人的代码。

因此,请注意,以下是来自apache站点的一些信息:

什么是会话?

会话接口的核心是一个键和值对表,这些键和值对可跨浏览器请求访问。这些对可以设置为任何有效的字符串,由应用程序使用会话。

将会话保留在服务器上

Apache可以配置为跟踪存储在特定服务器或服务器组上的每个用户会话。此功能类似于典型应用程序服务器中可用的会话。

如果已配置,则通过使用存储在 Cookie 中的会话 ID 或从 URL 查询字符串中嵌入的参数中提取会话来跟踪会话,如典型的 GET 请求所示。

从会话上的PHP文档

PHP 中的会话支持包括一种在后续访问中保留某些数据的方法。这使您能够构建更多自定义的应用程序,并提高网站的吸引力。

访问您网站的访问者被分配一个唯一的ID,即所谓的会话ID。这要么存储在用户端的Cookie中,要么在URL中传播。

会话支持允许您在 $_SESSION 超全局数组中的请求之间存储数据。当访问者访问您的网站时,PHP 将自动检查(如果session.auto_start设置为 1)或根据您的请求(通过 session_start() 显式检查,或通过 session_register()隐式检查是否已随请求一起发送了特定的会话 ID。如果是这种情况,将重新创建先前保存的环境。


答案 2

在搜索了很多并在会话上工作之后,我找到了自己的方式。我希望它对这里的每个人都很好

这是我的用户登录页面的查询:在这里,在匹配来自mysql的数据后,我将电子邮件存储为来自输入字段的会话

<?php
include_once("dbcon.php");
$que=mysqli_query($con,"select * from agents where companyemail='$email' AND 
pass='$password' AND post != 'Owner'"); 
$record = mysqli_fetch_assoc($que);
$_SESSION[$email]=$email;
header("Location:/dashboard/woresk/Dashboard_For_Agents/light/index.php? 
&loginid=$agentid");
?>

然后在用户的仪表板中有一个注销选项,我使用了此方法

<?php
session_start();
include_once("dbcon.php");
$sid=$_GET['loginid'];
$que=mysqli_query($con,"select * from agents where id='$sid'"); 
$recorde = mysqli_fetch_assoc($que);
$email=$recorde['companyemail'];
unset($_SESSION[$email]); 
header('location:/dashboard/woresk/index.php');
?>

为了避免用户进入仪表板,如果他们没有登录或他们的会话没有设置,下面的代码对我很好

<?php
session_start();
include_once("dbcon.php");
$sid=$_GET['loginid'];
$que=mysqli_query($con,"select * from agents where id='$sid'"); 
$recorde = mysqli_fetch_assoc($que);
$email=$recorde['companyemail'];
if(isset($_SESSION[$email]) && isset($_SESSION['alllogout'])){

 }
 else if(!isset($_SESSION[$email])){
    echo 
    "<script>
      window.location.href='/dashboard/woresk/index.php'
    </script>";
  }
  else if (!isset($_SESSION['alllogout'])){
    echo 
    "<script>
      window.location.href='/dashboard/woresk/index.php'
    </script>";
  }
  ?>

我希望这对其他人也有效。如果有任何疑问,请让我知道