PHP 登录和 $_SESSION
PHP login and $_SESSION
我在 php 和 js 中有一个现有的 Web 应用程序,我正在尝试向其添加身份验证。我已经弄清楚了关于如何创建登录页面并针对我组织的 LDAP 服务器进行身份验证的部分,其中多个用户创建了他们的帐户。
我的问题是关于 $_SESSION
变量对于所有访问的用户都是相同的。
如果用户访问该页面并且我设置
$_SESSION["username"]="xyz";
$_SESSION["logged_in"]=true;
然后,如果另一个用户登录,$_SESSION
变量对他来说是全新的还是 "username"
和 "logged_in"
之类的键将使用前一个用户的数据设置?
如果不是,那么 PHP 或 httpd 网络服务器如何知道选项卡是否已关闭或是否有新请求进入?
如果我在浏览器中打开多个选项卡(或多个浏览器 windows),它们在后端是否都具有相同的 $_SESSION
变量?
基本上我对 $_SESSION
变量的生命周期有疑问。
当服务器收到 HTTP 请求时,服务器会生成一个 Session ID 并将其发送回浏览器。浏览器将 Session ID 存储在 cookie 中,因此它可以 re-use 它。 ID在浏览器和服务器之间形成link,以便服务器可以识别后续请求来自同一浏览器。
浏览器然后在浏览器向同一服务器发出的每个请求中将 Session ID 发送到服务器(在 HTTP header 中)。 PHP 使用该 ID 在其存储中为该 ID 找到正确的 session 数据。实际的 session 数据是私有的,永远不会离开服务器。只有 ID 进入浏览器。
所有这些意味着两个用户不可能共享相同的 session 数据,因为每个 session ID 都是唯一的。 (从技术上讲,如果其他用户使用不安全的 HTTP-only 连接到服务器并且您能够监控他们的网络流量,甚至使用 man-in-the-middle 攻击,但那是另一个话题。)
如果关闭浏览器,默认情况下 session cookie 会被销毁。因此,当您 re-open 浏览器返回同一个网站时,它将发送一个没有 session ID 的请求,服务器将给予一个新的 session ID。
另一件会导致新 session 发生的事情是 session 在服务器上超时。服务器将有一个 session 超时值。它记录了 session 的启动时间以及最后一次使用该 session ID 发出请求的时间。如果在最后一个请求之后的超时分钟内没有使用给定的 session ID 发生请求,则 session ID 将被销毁,浏览器将在下一次请求时获得一个新的 session ID发生,不管它是否发送前一个或不。这通常就是您在几分钟不使用某个网站后发现自己已退出的原因。
我在 php 和 js 中有一个现有的 Web 应用程序,我正在尝试向其添加身份验证。我已经弄清楚了关于如何创建登录页面并针对我组织的 LDAP 服务器进行身份验证的部分,其中多个用户创建了他们的帐户。
我的问题是关于 $_SESSION
变量对于所有访问的用户都是相同的。
如果用户访问该页面并且我设置
$_SESSION["username"]="xyz";
$_SESSION["logged_in"]=true;
然后,如果另一个用户登录,$_SESSION
变量对他来说是全新的还是 "username"
和 "logged_in"
之类的键将使用前一个用户的数据设置?
如果不是,那么 PHP 或 httpd 网络服务器如何知道选项卡是否已关闭或是否有新请求进入?
如果我在浏览器中打开多个选项卡(或多个浏览器 windows),它们在后端是否都具有相同的 $_SESSION
变量?
基本上我对 $_SESSION
变量的生命周期有疑问。
当服务器收到 HTTP 请求时,服务器会生成一个 Session ID 并将其发送回浏览器。浏览器将 Session ID 存储在 cookie 中,因此它可以 re-use 它。 ID在浏览器和服务器之间形成link,以便服务器可以识别后续请求来自同一浏览器。
浏览器然后在浏览器向同一服务器发出的每个请求中将 Session ID 发送到服务器(在 HTTP header 中)。 PHP 使用该 ID 在其存储中为该 ID 找到正确的 session 数据。实际的 session 数据是私有的,永远不会离开服务器。只有 ID 进入浏览器。
所有这些意味着两个用户不可能共享相同的 session 数据,因为每个 session ID 都是唯一的。 (从技术上讲,如果其他用户使用不安全的 HTTP-only 连接到服务器并且您能够监控他们的网络流量,甚至使用 man-in-the-middle 攻击,但那是另一个话题。)
如果关闭浏览器,默认情况下 session cookie 会被销毁。因此,当您 re-open 浏览器返回同一个网站时,它将发送一个没有 session ID 的请求,服务器将给予一个新的 session ID。
另一件会导致新 session 发生的事情是 session 在服务器上超时。服务器将有一个 session 超时值。它记录了 session 的启动时间以及最后一次使用该 session ID 发出请求的时间。如果在最后一个请求之后的超时分钟内没有使用给定的 session ID 发生请求,则 session ID 将被销毁,浏览器将在下一次请求时获得一个新的 session ID发生,不管它是否发送前一个或不。这通常就是您在几分钟不使用某个网站后发现自己已退出的原因。