Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果两个不同网站上的会话名称相同,会发生什么情况?_Php_Session - Fatal编程技术网

Php 如果两个不同网站上的会话名称相同,会发生什么情况?

Php 如果两个不同网站上的会话名称相同,会发生什么情况?,php,session,Php,Session,我在我的XAMPP上有一个两个不同的项目说它是Project1和Project2 当我使用Project1登录时,我会检查身份验证是否成功,然后检查存储的会话。会话名称为$\u session['username'] 上述过程与Project2相同 现在,为了防止直接访问,我使用以下代码(在两个项目中): 因此,当我使用Project1登录时,我也可以访问Project2(不登录)。 为了防止出现这种情况,我知道如果我为这两个项目创建了diff.session name,那么问题就解决了 以上内

我在我的
XAMPP上有一个两个不同的项目
说它是
Project1
Project2

当我使用
Project1
登录时,我会检查身份验证是否成功,然后检查存储的会话。会话名称为
$\u session['username']

上述过程与
Project2
相同

现在,为了防止直接访问,我使用以下代码(在两个项目中):

因此,当我使用
Project1
登录时,我也可以访问
Project2
(不登录)。
为了防止出现这种情况,我知道如果我为这两个项目创建了diff.session name,那么问题就解决了

以上内容在我的本地服务器中。因此,我可以为我的所有项目创建不同的会话名称

但是,假设我的站点处于联机状态,如果我的会话名称与diff.site匹配,会发生什么情况?
有数百万个网站,我的会话名称可能与另一个网站的会话名称相匹配。然后,可能会出现这样的情况,即某些用户使用另一个网站(在同一浏览器中)访问我的网站,而他可能未登录就访问了我的网站

那个么,若两个不同网站的会话相同,会发生什么呢?用户无需登录即可访问我的网站吗? 如果是,我应该怎么做来防止它

提前谢谢

更新

根据
@让我看看
的答案,如果两个站点运行在同一台服务器上,那么它们可能共享数据。

因此,假设服务器正在共享,那么我应该如何防止它

PHP会话存储在服务器中。因此,当您上线时,相同会话名称之间不会有任何冲突。请记住,您仍然可以选择将会话存储在数据库中,这有助于提高安全性。

会话(通常)使用cookie存储,cookie是特定于域的。因此,google.com或evilhackerdomain.ru是否使用与您的应用程序相同的会话名称并不重要;您的cookie只能由您指定的域读取/使用。即使在以其他方式管理会话的异常情况下,它也将是特定于域的。

不会发生任何事情。因为另一个站点使用自己的数据库(具有自己的会话和用户表)。只有两个站点共享相同的数据库、相同的表和相同的会话处理,这才有关系

通常会话的会话ID存储在cookie中,它与主机名相关,可以由具有相同域的多个主机名共享。显然,会话存储在服务器上
因此,如果两个站点在同一台服务器上运行,则它们可能共享数据。因此,您应该始终更改服务器上存储会话的路径,以便每个不同的网站,由于以下原因,用户在未登录的情况下无法访问:

会话数据存储在上。如果两个应用程序在同一台服务器和同一个域名上运行,那么它们就有可能共享会话数据。否则,如果域不同,则不会与会话值冲突

因此,假设服务器正在共享,那么我应该如何防止它

回答您的后续问题。在
会话开始()之前,您只需使用
会话名称()
在特定网站上命名会话即可。


这一行应该可以做到。

我认为如果我们使用像
MD5
这样的安全算法来加密您将用于登录的会话。这将毫无问题地起作用。例如:

$name_session='username';
$name_session=md5(md5(md5($name_session));
$_SESSION[$name_session]="username_logged";

并非所有会话都使用cookie存储。这取决于您正在使用的网站。如果使用同一台服务器,会发生什么情况?这不重要,但这是一个您需要格外小心的实例--始终检查用户提供给您的会话cookie在相关域上是否有效。正如@sravis所指出的,将会话存储在数据库中有助于实现这一点。请参阅@Let me see的答案。感谢您的回答。如果同一服务器中的域不同,那会怎样?这样就不会产生任何问题,因为会话的名称是唯一的根据
@Ed Cottrell
cookies是特定于域的。那个么,若会话是相同的(在同一服务器中的不同域的情况下),会发生什么呢?谢谢你们的建议。
session_name('PROJECT1');
session_start();
$name_session='username';
$name_session=md5(md5(md5($name_session));
$_SESSION[$name_session]="username_logged";