php session_start包含文件

And*_*rea 8 php session

我从上一个问题中学到了很多关于会话开始的知识.现在我想知道当文件包含在其他文件中时会发生会话锁定.让我们说:

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我每次都想使用会话变量).

Eva*_*ski 10

我建议session.php在每页的第一行创建一个包含一次的文件.这样,会话在一个文件中处理,以防您需要更改验证或会话设置(并且不需要担心您的问题).


son*_*nnb 9

  1. 你应该只开始一次会话.在您的示例中,只需要在page.php的第一行使用session_start()
  2. 如果先前已启动会话,session_start()将生成E_NOTICE.您可以使用@session_start()来忽略它.
  3. 如果在输出HTML代码后使用session_start(),它也会生成E_NOTICE.


Jam*_*mes 7

由于上面的答案谈论会话已经开始时的错误,我只想指出你可以这样做:

if (!isset($_SESSION))
  {
    session_start();
  }
Run Code Online (Sandbox Code Playgroud)

然后,如果$ _SESSION已经启动(设置),它将不执行启动功能.

虽然没有什么比具有良好框架设置的结构良好的文件和文件夹布局更好.即使只是一个简单的框架结构,它将业务逻辑与表示分开.

这样一来,你也有类似的config文件夹与初始化脚本什么的,或者至少是具有包括 在其中包含在所有的网页/脚本时的一些文件夹中.

然后,您只需拥有session_start()(取决于您的设置)第一个包含文件,或者在单独的包含文件中,然后在需要时在脚本的特定区域中包含该会话文件.

无论哪种方式,您都不需要在任何其他文件中调用它,因为您知道根据您的设计结构根本不需要它.

如果您没有始终包含的文件,那么至少使用该isset()检查.


Bri*_*don 6

从PHP 4.3.3开始,在先前启动会话之后调用session_start()将导致级别E_NOTICE的错误.此外,第二个会话开始将被忽略.