0

可能重复:
$_SESSION 变量存储在哪里?

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

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

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

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

4

3 回答 3

1

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

为什么会这样?

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

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

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

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

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

于 2012-06-18T04:20:44.377 回答
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 保存,直到它被清除或过期。

……我是不是把它稀释了很多? :)

于 2012-06-18T05:27:26.823 回答
0

尝试此session_save_path()方法以了解 whrsessions存储在您的 Web 服务器上。

看看session.save_path你的php.ini.

于 2012-06-18T04:22:07.197 回答