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

时间:2013-12-06 06:39:48

标签: php session

我有两个差异。我的XAMPP上的项目是Project1Project2 当我使用Project1登录时,我检查身份验证,如果成功,则存储会话。会话名称为$_SESSION['username'] 上述过程与Project2相同。

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

if($_SESSION['username']=="")
{
  header("location:index.php");
}

因此,当我使用Project1登录时,我也可以访问Project2(无需登录) 为了防止这种情况,我知道如果我创建差异。两个项目的会话名称然后它被解决。

上面的内容是在我的本地服务器上。所以我可以创造差异。我所有项目的会话名称。

但是假设我的网站在线,如果我的会话名称与diff匹配会发生什么。网站?
 有数百万个网站,我的会话名称有可能与其他网站的会话名称相匹配。然后,有些用户可能会使用其他网站(在同一浏览器中)访问我的网站,而他可能无法访问我的网站登录。

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

提前致谢。

更新

根据@Let me see的回答,如果两个站点在同一台服务器上运行,则可能会共享数据。
所以假设服务器正在共享那么我应该怎么做以防止它呢?

7 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

  

假设服务器正在共享那么我应该怎么做以防止它?

回答您的跟进问题。您只需在session_name()

之前使用session_start().在特定网站上为会话命名
session_name('PROJECT1');
session_start();

这个单行应该这样做。

答案 2 :(得分:3)

通常会话的 sessionID存储在cookie 中,它与主机名相关,并且可以由具有相同域的多个主机名共享。并且很明显会话存储在服务器上
因此,如果两个站点在同一台服务器上运行,那么它们可能会共享数据。因此,您应始终在服务器上更改存储会话的路径不同的网站

答案 3 :(得分:1)

PHP会话存储在服务器中。因此,当您上线时,相同的会话名称之间不会发生任何冲突。请记住,您仍然可以选择将会话存储在数据库中,这可以帮助您进行更多的安全。

答案 4 :(得分:0)

什么都不会发生。因为其他站点使用自己的数据库(具有自己的会话和用户表)。只有两个站点共享相同的数据库,相同的表和相同的会话处理才有意义。

答案 5 :(得分:0)

由于以下原因,用户无法登录而无法访问

会话数据存储在server上。如果两个应用程序在同一服务器上运行且具有相同的域名,则可能存在共享会话数据的可能性。如果域不同,则不会与会话值冲突。

答案 6 :(得分:0)

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

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