Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Http 每个浏览器选项卡的不同会话数据_Http_Session_Cookies_Web - Fatal编程技术网

Http 每个浏览器选项卡的不同会话数据

Http 每个浏览器选项卡的不同会话数据,http,session,cookies,web,Http,Session,Cookies,Web,通常,HTTP服务器端会话数据存储(例如PHP中的$\u session)是使用cookie实现的-每个客户端都有一个唯一的会话ID存储在cookie中。服务器接收此cookie并使用它查找会话数据(作为某种密钥或文件名) 这可以很好地工作,但有时它会导致问题,因为cookie(以及会话)是跨浏览器选项卡共享的 我的问题是:是否可以实现服务器端数据存储,为每个浏览器选项卡保存不同的数据?最好的方法是什么?没有客户端JavaScript 示例:您有一种包含多个步骤的非常复杂的表单,您希望在将所有

通常,HTTP服务器端会话数据存储(例如PHP中的
$\u session
)是使用cookie实现的-每个客户端都有一个唯一的会话ID存储在cookie中。服务器接收此cookie并使用它查找会话数据(作为某种密钥或文件名)

这可以很好地工作,但有时它会导致问题,因为cookie(以及会话)是跨浏览器选项卡共享的

我的问题是:是否可以实现服务器端数据存储,为每个浏览器选项卡保存不同的数据?最好的方法是什么?没有客户端JavaScript


示例:您有一种包含多个步骤的非常复杂的表单,您希望在将所有内容写入数据库之前,将前面步骤中的数据存储到某个位置。您可以将数据存储到会话中,但如果有人在多个浏览器选项卡中使用相同的表单,则无法正常工作,因为会话数据将被共享。因此,最好为每个选项卡提供不同的存储空间


示例2:您希望允许用户在同一浏览器中登录多个帐户。因此,会话需要某种“fork”机制。

最好不要依赖会话状态,而是将数据存储在服务器端的临时存储器中,并在表单的隐藏字段中包含密钥

该键在向导的第一个屏幕(即第一个窗体)中获取其值,并在屏幕之间传递。然后,不管用户打开了多少个选项卡,每个选项卡都会在表单中嵌入自己的唯一键

即使您想在客户端存储表单数据,也可以使用它,尽管它更复杂。cookie具有名称,因此您可以使用每个表单的唯一ID作为cookie名称,然后将值存储在cookie中。当然,您必须确保cookie大小不会超过4K

但是,如果有人在多个浏览器选项卡中使用相同的表单,这将无法正常工作,因为会话数据将被共享

为什么不想在设置或获取另一个数据包之前检查会话数组(验证)中的数据

但我认为,更好的方法是在服务器端验证之前,使用客户端存储(如LocalStorage)来设置一些数据。对于这种类型的数据,高负载project服务器端存储不好。如果客户机数据可以存储在客户机上,就应该这样做


当用户重新打开表单的第二步并重新输入数据时,您会怎么说?(+服务器请求,+服务器加载)

谢谢。对于向导表单的示例来说,这可能是一个很好的解决方案,但最初的问题仍然适用(虽然可能有点假设)。我认为这是不可能的,因为在客户端(通过浏览器)可以确定Cookie是否在选项卡之间共享。您可以尝试为每个选项卡使用不同的子域,这是比解决方案更多的解决方法。。。