PHP如何使用cookie在同一浏览器中管理多个会话?

时间:2016-11-25 09:42:42

标签: php session cookies

我是PHP的新手,我在没有找到我正在寻找的答案的情况下阅读其他文章,但仍然不知道我想做的事情是否有意义。

我正在使用PHP 7。

我的用户身份验证页面,检查凭据然后执行session_start(),在浏览器中创建会话服务器端和cookie客户端。

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

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

我设法使用session_id()在服务器端根据用户名在身份验证页面中session_start()创建不同的会话,但问题出在客户端。

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

因此,当恢复会话时,session_start()将仅恢复最后一个会话,根据会话信息混合从DB获取的数据。

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

有什么想法吗?

进一步详情: 我正在更新遗留应用程序,试图解决一些安全问题。对多个会话的需求来自管理目的,其中管理员访问同一站点。它需要分离会话的原因是,根据会话信息,数据是从不同的数据库中提取的。因此,常规使用每个用户只需要一个会话,但管理员需要根据该登录进行多次登录查看不同的数据。

2 个答案:

答案 0 :(得分:0)

您可以使用相同的会话,但更改您要查找的变量名称:

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

答案 1 :(得分:0)

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

..浏览器的默认行为是"重用"如果您在另一个标签中重新访问URL,则使用相同的Cookie集。所以,如下所述:

  • 简单的方法可能是启动另一个浏览器。如果您安装了多个浏览器,则不是相同的浏览器,而是像firefox和chrome一样。
  • 另一种方法是安装浏览器插件,如适用于Chrome的Sessionbox或适用于Firefox的Multifox。

编辑,为清楚起见:我可以考虑使用多个会话时的两种情况:

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

这是我的参考框架。基于此,我认为问题是为了发展。我并不是说该网站需要安装额外的软件包。 Flash将是唯一一个与之相关的人......