PHP session_destroy和会话范围?

时间:2012-07-31 12:52:48

标签: php session session-state

好的,那里有很多“简单的会话”问题,但我似乎无法找到我追求的东西。它让我有点烦恼,因为PHP文档似乎没有解释得这么好。

三折问题。

  1. 它表示session_destroy()会清除会话数据,但不会清除全局变量。所以它擦除了数据,但变量仍然很明显?文档对全局变量的意义是什么?

  2. 我可以使用哪些不同类型的方法来销毁会话数据,是不是session_destroy足够多?为什么你会使用下面的编码,就像我在一些代码示例中看到的那样:

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

  4. 提前感谢能帮助我回答这些问题的任何人。

2 个答案:

答案 0 :(得分:1)

  

文档对全局变量的意义是什么?

它在讨论$_SESSION超全局变量。

  

我可以使用哪些不同类型的方法来销毁会话   数据,是不是session_destroy够了?你为什么要用下面的代码呢?   正如我在一些代码示例中看到的那样:

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

  

所有浏览器的情况总是如此吗?

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

答案 1 :(得分: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无效)