为了从我的网站注销用户,我将页面重定向到使用session_destroy()函数的logout.php
。即使在这里,没有session_start()
功能也无法使用注销功能。通过在session_destroy()
函数之前添加session_start()函数,我可以成功注销用户。
为什么我每次都要在与会话相关的页面中使用session_start()
函数?
session_destroy()破坏活动的会话。如果您未初始化会话,则将没有任何破坏。
为什么我每次在与会话相关的页面上都需要使用session_start()函数?
所以PHP知道要销毁哪个会话。 session_start()
查看是否存在会话cookie或ID。只有有了这些信息,您才能销毁它。
在默认配置中,PHP会话在硬盘之外运行。 PHP要求您在需要此支持时明确告知它,以避免不必要的磁盘IO。
[session_start()
还告诉PHP查找用户的会话是否存在。
session_start()创建一个会话或恢复基于通过GET传递的会话标识符或POST请求,或通过cookie传递。
根据http://php.net/manual/en/function.session-start.php
基本上是通过调用session_start()
,PHP读取标头并将该会话ID交叉引用到系统上的文件(文件系统/数据库/等),然后可以填充与该特定用户相关的$_SESSION
。依次允许您调用session_destroy()
,因为它知道实际要销毁的会话。
考虑session_start()作为告诉php引擎的方法。...您要使用会话。
而且,据我所知,始终使它成为php页面中的第一行。
我对session_start()的用法感到困惑;每次我使用会话变量时,我都在调用session_start。确切地说,我有session_start();每个页面上不止一次(甚至不调用session_destroy())。例如,>
// 1st call session_start(); if (!isset($_SESSION['UserID'])) { // Do something } else { // Do something else } // .... some other code // 2nd call session_start(); if (!isset($_SESSION['UserID'])) { // Do something totally different } else { // Do something else totally different }
这为我造成了性能问题。因此,我最终在页面顶部仅调用了一次
session_start();
,似乎一切正常。
您必须在要运行会话的每个文件中调用一次(仅一次)session_start。
与其他语言相比,它的语气相当低落,所有其他语言都启动一次会话,然后您添加,更改会话数据并关闭会话。