PHP 会话是否与特定文件关联

Are PHP Sessions Associated with Particular Files

PHP session data 是否与特定网页或 PHP 文件关联?换句话说,如果一个会话是在 foo.php 中创建的,它的会话数据是否可以从 bar.php 访问,假设两者都没有引用另一个并且都直接从网络浏览器访问。

如果它是特定于文件的,这如何与 include()s 一起使用?例如,如果 foo.php 创建一个会话,然后包含 bar.phpbar.php 中的代码是否可以访问会话数据?如果会话是在 bar.php 中创建的呢?然后数据会特定于 bar.phpfoo.php 吗?

是的,会话数据可跨不同的文件和请求使用,这就是会话的全部要点:提供 HTTP 协议无法提供的状态。您可以将会话视为 Web 服务器上的一个小型存储空间,供您的代码存储有限的数据。

如果您的 foo.php 启动一个会话然后包含 bar.phpbar.php 中的代码确实能够访问该会话。如果您的 bar.php 执行 session_start(),那么 foo.php 可以从那时起访问会话(因此在 include() 之后)。

请记住:会话对于特定浏览器是唯一的并且是易变的。即:关闭浏览器,会话将变为不活动、不可访问和过期(通常在 30 分钟后)。

注意:- 现代浏览器能够重新连接会话。

会话数据在 php 的所有页面上都可用。通常我们在文件(配置文件)中启动会话(session_start()),该文件包含在所有文件中。

因此,如果您没有公共文件或不想全局定义,那么您需要在每个文件中启动 session_start()。

我给出答案bar.php或foo.php互相包含

  • 总有第一个文件没有包含,通过浏览器调用或shell
  • 之后包含所有其他文件( 订单由您决定)
  • 如果你包含一个文件,它几乎就像合并一些代码块,没什么特别的。
  • 在一个名为 session_start 的文件之后,会话出现在 PHP
  • 所以现在或以后包含的任何文件都可以访问会话数据
  • 但是下一个再次执行 session_start 的文件会抛出一个通知,因为会话已经开始了
  • 还有一个文件(或者更好的文件中的代码)可以做 session_close 和一些其他的东西来打开一个新会话