【问题标题】:How the a webpage will knows that session is set or not? [duplicate]网页如何知道会话是否设置? [复制]
【发布时间】:2012-06-18 04:15:16
【问题描述】:

可能重复:
Where are $_SESSION variables stored?

当我们使用会话时,我们需要在每个页面中启动会话。现在假设我已经在1.php 中设置了会话现在重定向到2.php,在2.php 页面中我再次开始会话1.php2.php 之间没有任何链接。 2.php 不知道1.phpsession id 是什么。

现在我的问题是 2.php 如何与 1.php 开始的 session id 相同。这个会话存储在哪里?它是如何工作的?

这里我们没有将任何参数从 1.php 传递到 2.php,因为 Frederick Marcoux 说 SESSION_START() 被 2.php 忽略。那么 2.php 将如何知道会话已经在运行。

如果它在服务器端,那么在多个会话的情况下,它如何识别哪个会话是针对哪个请求的?

【问题讨论】:

    标签: php session


    【解决方案1】:

    这样想……

    当有人访问您的 1.php 页面时,页面顶部的 session_start() 会在您的服务器(托管)上启动一个操作,并生成唯一的会话 ID。

    然后它附加到您服务器上的每个页面(url)(在同一域下)(即:2.php 或 3.php),如果这些页面存在 session_start() 函数,则 SID 可用于脚本(在那些页面上)并且可以访问和验证。

    如果您页面 3.php 上的 SID 与同一用户在访问页面 1.php 时创建/生成的 SID 匹配,那么您知道该页面正在由同一个人访问并执行其他操作例如,对于直接访问页面 3.php 并且没有获得必要 SID 的访问者,您不会这样做。

    SID 从服务器传递到您的浏览器并作为 cookie 保存,直到它被清除或过期。

    (...我把它稀释到很多了吗? :)

    【讨论】:

    • 这件事看起来很可能。但是你确定会话 id 附加到所有 url,谁来控制它?
    • 在服务器端自动生成的会话 ID 由服务器控制。一旦它被存储到访问者的浏览器中,当访问者访问同一域下的其他页面时,它可以被视为一个秘密标志。当然,您作为程序员可以操作会话 ID、其位置、内容、可用性等。请参阅:httpd.apache.org/docs/trunk/mod/mod_session.html
    • 谢谢,这让我清楚地知道它是如何工作的。
    【解决方案2】:

    会话是基于 Cookie 的。当您在一个页面上启动会话时,它将获得一个 ID。在您创建 session_destroy() 并使用 session_start() 开始新会话之前,此 ID 将保持不变。

    为什么会这样?

    因为多个页面可能会使用相同的会话 ID 来记录或跟踪某些用户。

    `2.php`上的`session_start()`是什么

    它只是被服务器忽略了。如果你检查你的 PHP 日志,你会看到这样的东西:

    SESSION_START() IGNORED. A SESSION HAS BEEN ALREADY STARTED.
    

    3 个月前我也有同样的问题,但在这个网站上没有。

    【讨论】:

      【解决方案3】:

      试试这个session_save_path() 方法来了解sessions 是否存储在您的网络服务器上。

      查看您的php.ini 中的session.save_path

      【讨论】:

      • 在我系统的 php.ini session.save_path 中有注释。
      • @Sumant mine too .. 检查这个然后 --
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多