![](/img/trans.png)
[英]Do I need to use session_start() in PHP to use $_SESSION?
[英]PHP session_start() function: Why I need it everytime I use anything related to PHP sessions
为了从我的网站注销用户,我将页面重定向到logout.php
,在那里我使用 session_destroy() 函数。 即使在那里,如果没有session_start()
函数,注销功能也无法工作。 之前加入session_start()函数session_destroy()
函数,我能够成功注销用户。
为什么我每次都需要在每个页面中使用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 一次(并且仅一次)。
允许您只调用一次的常用方法是将调度程序文件作为 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.