一次为多个用户提供PHP $ _SESSION

时间:2012-08-13 09:22:45

标签: php arrays security session login

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

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

但为了应对更多用户,我需要创建一个多维数组吗?

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

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

2 个答案:

答案 0 :(得分:45)

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

编辑:实际上,在考虑它时,这是一个非常好的问题。问这些问题是件好事,这意味着你正在认真考虑你的代码如何真正起作用。继续问这些事情,并继续测试。我觉得有一天你会写一些惊人的代码。

所以在这个说明中,这是来自apache网站的一些信息:

什么是会话?

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

在服务器上保持会话

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

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

来自PHP docs会话:

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

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

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

答案 1 :(得分:0)

大量搜索并进行会议后,我找到了自己的方式。我希望它对每个人都有用

这是我的用户的登录页面查询: 在这里,我从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>";
  }
  ?>

我希望这对其他人也有用。如有任何问题,请告诉我