【问题标题】:What happens if session name is same on two different websites?如果两个不同网站上的会话名称相同会​​怎样?
【发布时间】:2013-12-23 10:26:22
【问题描述】:

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

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

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

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

上面的东西在我的本地服务器上。所以我可以创建差异。我所有项目的会话名称。

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

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

提前致谢。

更新

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

【问题讨论】:

    标签: php session


    【解决方案1】:

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

    【讨论】:

    • 感谢您的建议。
    【解决方案2】:

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

    【讨论】:

    • 并非所有会话都使用 cookie 存储。这取决于您使用的网站。
    • 同一台服务器会怎样?
    • 没关系,但在这种情况下您需要格外小心——始终检查用户提供给您的会话 cookie 在相关域上是否有效。正如@sravis 指出的那样,将会话存储在数据库中有助于解决此问题。
    • 看@让我看看的答案。
    • 感谢您的回答。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 如果域不同怎么办。在同一台服务器上?
      • 那么它根本不会造成问题,因为会话的名称将是唯一的
      • 根据@Ed Cottrell cookie 是特定于域的。那么如果会话相同会发生什么(如果同一服务器中的不同域)?
      【解决方案5】:

      用户不登录就无法访问,原因如下,

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

      【讨论】:

        【解决方案6】:

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

        回答您的后续问题。您可以在 session_start(). 之前使用 session_name() 在特定网站上简单地命名您的会话

        session_name('PROJECT1');
        session_start();
        

        这个单行应该做到这一点。

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            猜你喜欢
            • 2012-06-05
            • 1970-01-01
            • 1970-01-01
            • 2020-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-07
            相关资源
            最近更新 更多