2016-11-25 143 views
0

我是PHP的新手,我没有找到我正在寻找的答案的其他文章,但仍然不知道我想做的事情是否合理。PHP如何使用cookie在同一浏览器中管理多个会话?

我使用PHP 7

我的用户认证页面,检查凭据,然后执行session_start(),从而在浏览器会话的服务器端和cookie的客户端。

Web应用程序的每个其他页面然后调用session_start()来恢复会话信息,在这种情况下检查cookie。一切正常,至少当我有一个单一的登录。

我希望能够有多个用户同时使用cookie在同一浏览器(在另一个选项卡上,例如。)同时登录。我不想将会话ID附加到URL。

我设法在服务器端使用session_id()session_start()之前在基于用户名的认证页面上创建不同的会话,但问题出在客户端。

第一次成功登录(session_start())会创建一个cookie,第二次登录会更新同一个cookie,从而破坏以前创建的会话。

因此,当恢复会话时,session_start()将只恢复上次会话,根据会话信息混合从数据库中提取的数据。

有没有办法让session_start()为每次登录创建一个cookie并使PHP使用cookie恢复正确的会话?

任何想法?

更多详情: 我正在更新旧版应用程序,尝试修复一些安全问题。多个会话的需求来自管理员访问同一站点的管理目的。为什么需要分离会话的原因是,根据会话信息,数据是从不同的数据库中获取的。因此,定期使用每个用户只需要一个会话,但他需要管理员根据该登录信息进行多次登录才能查看不同的数据。

+0

我想这会帮助你http://stackoverflow.com/questions/24964699/php-how-can-i-create-multiple-sessions – user3099298

+0

[多PHP会话]可能的重复(http://stackoverflow.com/questions/854105/multiple-php-sessions) –

+0

你想在开发过程中使用它吗?或者这是为最终用户和完成的网站? –

回答

0

您可以使用相同的会议,但更改您正在寻找的变量名:

if ($_SERVER['REQUEST_URI'] == '/admin/'): 
    $session_name = 'session1'; 
else: 
    $session_name = 'session2'; 
endif; 
session_start($session_name); 
0

默认PHP行为处理使用Cookie的会话。

..和针对浏览器的默认行为是,如果你重温在另一个选项卡中的URL为“重用”相同的一组Cookie。所以,类似下面:

  • 最简单的方法可能是启动其他浏览器。不是相同的浏览器,但像firefox和铬,如果你有多个浏览器安装。
  • 另一种方式是安装浏览器插件,如用于Chrome的会话箱或用于Firefox的Multifox。

编辑,为了清楚:我能想到的以下两种情况下会使用多个会话:

  • 在开发过程中。取决于应用程序,但明显的情况是测试两个用户之间的通信。
  • 部署后。虽然我从来没有见过一个网站需要同一用户帐户多次登录。

这是我的参照系。基于此,我认为这个问题是为了发展。我并不是建议网站应该要求安装额外的软件包。闪光将是唯一一个有史以来带走了..

+0

所以你会建议你的程序的用户安装第二个浏览器或插件?尼斯... – Auris

+0

@Auris完全免责声明,可能会误解他的意图。我认为这是他在开发过程中使用的。当然最终用户不应该需要安装东西才能使用该网站(例外:闪存?)但我从来没有经历过一个普通用户必须多次登录的网站。 –

+0

如果您使用单独的会话,则可以实现多个会话饼干(甚至在同一个网站上)。至于他的问题,我相信他问的是如何构建:) – Auris

相关问题