好的,那里有很多“简单的会话”问题,但我似乎无法找到我追求的东西。它让我有点烦恼,因为PHP文档似乎没有解释得这么好。
三折问题。
它表示session_destroy()会清除会话数据,但不会清除全局变量。所以它擦除了数据,但变量仍然很明显?文档对全局变量的意义是什么?
我可以使用哪些不同类型的方法来销毁会话数据,是不是session_destroy足够多?为什么你会使用下面的编码,就像我在一些代码示例中看到的那样:
session_start();
$_SESSION = array();
session_destroy();
会话似乎在浏览器实例中持续存在。例如,当打开两个单独的浏览器时,IE9将保持相同的会话ID。与Chrome相同。只有当我关闭所有浏览器时,才能获得新的会话ID。所有浏览器总是这样吗?我想知道,以便我可以在编码期间牢记这一点 - 不想稍后发现某些浏览器不是持久性的,我的代码认为它确实存在,然后冒着产生各种错误的风险。 / p>
提前感谢能帮助我回答这些问题的任何人。
答案 0 :(得分:1)
文档对全局变量的意义是什么?
它在讨论$_SESSION
超全局变量。
我可以使用哪些不同类型的方法来销毁会话 数据,是不是session_destroy够了?你为什么要用下面的代码呢? 正如我在一些代码示例中看到的那样:
您可以使用它来删除$_SESSION
的内容,以便脚本的其余部分不使用现在过期的数据。在脚本中的某个时刻,您已经决定清除用户的会话,因此您不希望任何其他逻辑使用该会话日。通过将$_SESSION
设置为空数组,将擦除其所有先前内容。
所有浏览器的情况总是如此吗?
是的,会话基于Cookie(通常)与特定用户相关联,并且每次用户访问网站时都会发送到您的网站(如果他们有cookie),无论打开多少个标签页或者他们是否甚至使用标签式浏览。
答案 1 :(得分:1)
$_SESSION
是超级全局变量 session_destroy
功能基本就足够了。它删除存储所有会话变量的服务器上的session_file,并删除会话cookie。变量在session_destroy
调用仍在内存中之后,但更改这些值无效(除了再次调用session_start()
)。
但是代码片段也会从内存中删除变量。这很重要,例如,应用程序稍后在同一请求中检查$_SESSION['admin']
以查看用户是否具有管理员权限。
需要session_start()
功能,因为您需要先加载会话才能将其删除。
会话在不同的浏览器中不会持续存在,但是它们在同一浏览器的所有窗口/选项卡中都是持久的。如果关闭浏览器会发生什么情况取决于您的PHP-ini设置。 session.cookie_lifetime
定义浏览器应保留cookie的时间长度(以秒为单位)(即使在重新启动后)。如果session.cookie_lifetime
设置为0,则浏览器会在关闭时删除会话cookie。
session.gc_maxlifetime
定义了网络服务器保存会话文件的时间(没有会话文件,会话cookie无效)