32

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

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

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

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

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

4

2 回答 2

57

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

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

所以在那张纸条上,这里有一些来自apache网站的信息:

什么是会话?

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

在服务器上保持会话

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

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

并来自Sessions 上的PHP 文档:

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

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

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

于 2012-08-13T09:23:42.080 回答
-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>";
  }
  ?>

我希望这也适用于其他人。如果有任何问题请告诉我

于 2019-09-21T07:48:23.930 回答