2014-04-07 105 views
1

对不起,这可能是一个初学者的问题。如果我使用$_SESSION变量,服务器如何跟踪多个用户/引用他们说约翰已登录$_SESSION['username']="John"系统将如何引用彼得和詹姆斯谁也登录,因为你不能有$_SESSION['username']="Peter"$_SESSION['username']="James",因为他们会写彼此?会话如何跟踪多个用户

我可能在这里错过了一些简单的东西。

+2

你可以看到会话为每个用户一个服务器端的文件(让用户可以有不同的数据)存储在cookie是特定于用户的文件名。这样,每个用户都可以获得他们自己的会话,以及他们自己的会话变量。 –

+0

当您调用'session_start()'时,一个cookie(默认情况下称为PHPSESSID,除非您为自定义cookie调用'session_name()')设置用户浏览器的会话ID,该ID与服务器上的会话数据相关。 –

+0

感谢Joachim。它在现实生活中如此工作吗?如果它确实需要在cookie中存储什么(我认为尽可能少)。我想我需要一个例子。 – user2976086

回答

0

@ user2976086

$ _SESSION恰恰是什么让用户除了对PHP服务器。每次调用session_start时,php服务器都会创建一个新的客户端会话(如果尚未启动),这通常会导致在您的浏览器中创建名为PHPSESSID的Cookie。在服务器端,php服务器为每个唯一会话ID(存储在cookie中,每个浏览器只有一个)创建一个唯一的$ _SESSION数组。这就是为什么你只能在每个浏览器上用一个用户登录的原因(你可以使用firefox和chrome同时登录2个账户到大多数站点,例如为每个浏览器创建一个cookie)。这就是为什么你不能用不同的用户“覆盖”$ _SESSION ['username'],除非你在该浏览器窗口注销,导致session_destroy被调用,或者删除包含当前用户的sessionid的cookie。

尝试阅读: http://www.php.net/manual/en/session.security.php

+0

谢谢Bartlomiej。所以PHP在后台自动处理PHPSESSID和$ _SESSION数组。 – user2976086