3

好的,那里有很多“简单会话”问题,但我似乎找不到我想要的。由于 PHP 文档似乎没有很好地解释这一点,这让我有点恼火。

三折题。

  1. 它说 session_destroy() 会清除会话数据,但不会清除全局变量。所以它会擦除数据但变量仍然完好无损?文档中的全局变量是什么意思?

  2. 我可以使用哪些不同类型的方法来销毁会话数据,session_destroy 还不够吗?为什么要使用我在一些代码示例中看到的以下编码:

    session_start();
    $_SESSION = array();
    session_destroy();
    
  3. 会话似乎跨浏览器实例持续存在。例如,当打开两个单独的浏览器时,IE9 将保持相同的会话 ID。与 Chrome 相同。只有当我关闭所有浏览器时,我才会获得一个新的会话 ID。所有浏览器都是这种情况吗?我想知道,以便在编码过程中牢记这一点 - 以后不想发现某些浏览器不是持久的,而我的代码认为它是持久的,然后冒着产生各种错误的风险。

提前感谢任何可以帮助我回答这些问题的人。

4

2 回答 2

1

文档中的全局变量是什么意思?

它在谈论$_SESSION超级全局变量。

我可以使用哪些不同类型的方法来销毁会话数据,session_destroy 还不够吗?为什么要使用我在一些代码示例中看到的以下编码:

您可以使用它来删除其中的内容,$_SESSION以便脚本的其余部分不使用现已过期的数据。在您的脚本中的某个时刻,您已经决定要清除用户的会话,因此您不希望任何其他逻辑使用该会话日。通过设置$_SESSION为空数组,其所有先前的内容都将被擦除。

所有浏览器都是这种情况吗?

是的,会话基于 cookie(通常)与特定用户相关联,并且每次用户访问站点时都会发送到您的站点(如果他们有 cookie),无论打开了多少选项卡或是否他们甚至没有使用标签式浏览。

于 2012-07-31T12:56:37.453 回答
1
  1. $_SESSION是超级全局变量
  2. session_destroy功能基本够用。它删除存储所有会话变量的服务器上的 session_file 并删除会话 cookie。调用后的变量session_destroy仍在内存中,但更改这些值无效(除非您session_start()再次调用)。

    但是代码片段也从内存中删除了变量。例如,如果应用程序$_SESSION['admin']稍后在同一请求中检查用户是否具有管理员权限,这很重要。

    session_start()功能是必需的,因为您需要先加载会话才能将其删除。

  3. 会话在不同的浏览器中不是持久的,但是它们在同一浏览器的所有窗口/选项卡中是持久的。如果你关闭浏览器会发生什么真的取决于你的 PHP-ini 设置。session.cookie_lifetime定义浏览器应保留 cookie 的时间(以秒为单位)(即使在重新启动后)。如果session.cookie_lifetime设置为 0,浏览器会在关闭时删除会话 cookie。

    session.gc_maxlifetime定义网络服务器保留会话文件的时间(没有会话文件,会话 cookie 无效)

于 2012-07-31T13:00:16.157 回答