有人可以澄清一下 PHP 中的这个会话在做什么


Could someone clarify what this session thing in PHP is doing?

if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);

三个小问题:

  1. 为什么在这里使用二维数组?为什么不直接说$_SESSION['login-err']
  2. 会话变量如何工作?我环顾四周,似乎只能收集到您可以分配存储在会话中的变量,但是是否有任何预定义的变量?
  3. 在PHP中,你可以互换二维和一维数组吗?如果您想要不同维度的数组,我习惯于需要一个新变量。
  1. 这是一个设计决策。你必须问开发人员是谁写的。
  2. $_SESSION 数组存储您扔给它的所有内容。您可以像使用任何其他PHP数组一样使用它,并且它将被存储用于后续页面加载。没有任何预定义的会话变量(如果您想自己检查,请尝试执行var_dump($_SESSION))。
  3. 是的,您可以随心所欲地混合。PHP 中的"数组"实际上是哈希映射,每个元素可以是任何其他 PHP 数据结构(包括其他数组/哈希映射)。所以它不是一个真正的多维数组,它是一个存储其他哈希图的哈希图。
  1. 好吧,假设您有一堆可能的消息,而不仅仅是登录错误。然后,您需要一个消息数组进行迭代通过。因此,味精数组。
  2. 会话变量对于持久性数据很有用。你使用 session_start();在要的每个文件的开头访问会话,您可以再次检索该数据。我没有知道任何预定义的变量,尽管我不明白你为什么会真的需要他们。
  3. 你能再澄清一下这个问题吗?
  1. 我们不知道,因为我们不知道原始程序的上下文或设计。

  2. PHP 会话是保留请求到请求的数据的好方法。$_SESSION 变量保留给定用户的值,直到会话关闭或超时。在此处查看有关 PHP 会话的所有信息: http://php.net/manual/en/features.sessions.php

  3. PHP 数组非常灵活,可以根据需要添加维度,因为添加新维度所做的只是将一个数组放在另一个数组的元素中。看这里: http://www.php.net/manual/en/book.array.php

$_SESSION是一个字典,而不是一个数组。虽然语法可能看起来相似,但您可以在字典中插入任意数量的内容,而无需重新声明它。 $_SESSION在其'msg'槽中存储了另一个字典变量,因此当您访问$_SESSION['msg']时,它会返回另一个字典,然后您可以添加一个指向implode('<br />',$err);'login-err'插槽。我猜编写代码的人想将所有消息组织在一起作为$_SESSION字典中的一个插槽。

$_SESSION是一个字典,在同一会话的所有PHP文件中都是恒定的,允许您在PHP文件之间存储和发送信息。没有预定义的$_SESSION变量。