【问题标题】:Are PHP Sessions Associated with Particular FilesPHP 会话是否与特定文件相关联
【发布时间】:2017-01-26 10:58:07
【问题描述】:

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

如果它是特定于文件的,它如何与include()s 一起工作?比如foo.php创建了一个session,然后包含bar.php,那么bar.php中的代码可以访问session数据吗?如果会话是在bar.php 中创建的呢?那么数据是否会特定于bar.phpfoo.php

【问题讨论】:

  • sessions 可在您使用session_start 启动会话的每个http request 中访问。与你所在的文件无关
  • @JOUM 所以 PHP 会话只与用于识别的 cookie(或 URL 参数)相关联,而不与 cookie 文件或 URL 相关联?
  • @laef 对不起,忘记我的最后评论。我在一个差异。行星
  • 会话有点复杂,简而言之:每个文件都可以有自己的会话,但不能针对不同的用户,也可以访问他自己的数据(但通常没有人这样做) :) 了解 session_name session_start、session_close、session_id 和所有其他会话函数。

标签: php session php-include


【解决方案1】:

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

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

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

注意:- 现代浏览器可以通过会话重新连接。

【讨论】:

  • 请记住,如果您的浏览器意外关闭,会话可以恢复。
  • 诚然,现代浏览器具有重新连接的能力。谢谢。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我给回答 bar.php 或 foo.php 互相包含。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多