我从上一个问题中学到了很多关于会话开始的知识.现在我想知道当文件包含在其他文件中时会发生会话锁定.让我们说:
page.php文件
include('header.php');
...some html content....
include('sub_page.php');
...more html....
Run Code Online (Sandbox Code Playgroud)
header.php文件:
session_start();
..save session vars...
..print web page header...
Run Code Online (Sandbox Code Playgroud)
sub_page.php
session_start();
...use session vars....
..print page content...
Run Code Online (Sandbox Code Playgroud)
当我打开page.php时,一旦header.php完成,会话是否会被解锁?或者它是否适用于整个page.php生活,所以sub_page的会话被阻止了?是否必须session_start
在sub_page中?如果我session_write_close
每次使用会话数据,那会更好吗?(虽然这意味着session_start
我每次都想使用会话变量).
由于上面的答案谈论会话已经开始时的错误,我只想指出你可以这样做:
if (!isset($_SESSION))
{
session_start();
}
Run Code Online (Sandbox Code Playgroud)
然后,如果$ _SESSION已经启动(设置),它将不执行启动功能.
虽然没有什么比具有良好框架设置的结构良好的文件和文件夹布局更好.即使只是一个简单的框架结构,它将业务逻辑与表示分开.
这样一来,你也有类似的config文件夹与初始化脚本什么的,或者至少是具有包括 在其中包含在所有的网页/脚本时的一些文件夹中.
然后,您只需拥有session_start()
(取决于您的设置)第一个包含文件,或者在单独的包含文件中,然后在需要时在脚本的特定区域中包含该会话文件.
无论哪种方式,您都不需要在任何其他文件中调用它,因为您知道根据您的设计结构根本不需要它.
如果您没有始终包含的文件,那么至少使用该isset()
检查.