要从我的网站注销用户,我将页面重定向到logout.php
我正在使用session_destroy()函数。即便如此,如果没有session_start()
功能,注销功能也无法正常工作。通过在session_destroy()
函数之前添加session_start()函数,我能够成功注销用户。
为什么我需要每次以及在每个与会话相关的页面中使用session_start()
函数?
答案 0 :(得分:12)
为什么我需要每次以及在每个与会话相关的页面中使用session_start()函数?
因此PHP知道要销毁哪个会话。 session_start()
查看是否存在会话cookie或ID。只有这些信息才能摧毁它。
答案 1 :(得分:12)
session_destroy()会破坏活动会话。如果你没有初始化会话,就没有什么可以被销毁的。
答案 2 :(得分:3)
在默认配置中,PHP Sessions在硬盘上运行。当您需要此支持以避免不必要的磁盘IO时,PHP会要求您明确告诉它。
session_start()
还告诉PHP查看用户的会话是否存在。
答案 3 :(得分:3)
session_start()创建会话或 基于a恢复当前的 通过GET或传递的会话标识符 POST请求,或通过cookie传递。
根据http://php.net/manual/en/function.session-start.php
基本上通过调用session_start()
,PHP会读取标头并将会话ID交叉引用到系统上的内容(文件系统/数据库/等),然后可以填充相关的$_SESSION
对那个特定的用户。这反过来允许您调用session_destroy()
,因为它知道实际销毁的会话。
答案 4 :(得分:0)
将session_start()视为告诉php引擎的方式....你想要使用会话。
并且,据我所知,总是让它成为php页面中的第一行。
答案 5 :(得分:0)
我对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();
一次,一切似乎都运行正常。
答案 6 :(得分:0)
您必须在希望会话工作的每个文件中调用session_start一次(并且只能调用一次)。
允许您只调用一次的常用方法是将调度程序文件作为index.php;在这里调用session_start并让此页面包含基于url的$ _GET的其他页面。
<?php
session_start();
if(isset($_GET['page']) && file_exists('pages/'.$_GET['page'].'.php') {
include $_GET['page'];
}
?>
//www.mysite.com/index.php?page=fish will display /pages/fish.php with session access