网页如何知道会话是否已设置


How the a webpage will knows that session is set or not?

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

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

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

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

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

这样

想吧....

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

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

如果第 3.php 页上的 SID

与同一用户访问第 1 页时创建/生成的 SID 匹配.php则您知道此页面是由同一个人访问的,并为他们执行其他操作,例如,您不会为直接访问第 3 页且未获得必要 SID 的访问者执行其他操作.php这些操作。

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

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

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

为什么会这样?

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

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

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

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

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

试试这个session_save_path()方法,知道 whr sessions存储在您的 Web 服务器上。

看看你php.ini中的session.save_path.