Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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
C# 会话-两个浏览器窗口使用单独的会话_C#_Session - Fatal编程技术网

C# 会话-两个浏览器窗口使用单独的会话

C# 会话-两个浏览器窗口使用单独的会话,c#,session,C#,Session,我的网站由一个主仪表板页面和一个建筑物列表组成 通过单击一个建筑,它将打开一个新的浏览器窗口,其中包含该特定建筑上的许多功能和特征 在这种情况下,我可以一次打开多个浏览器窗口,每个窗口表示另一栋建筑的数据。如何设置会话数据不会在windows之间混淆 我们使用在给定页面的ViewState中存储ID的组合来测试处理不同窗口数据的复杂会话对象的ID。考虑到不同浏览器在选项卡、页面和会话处理方面的差异,您可以获得一些非常奇怪的行为。在会话中存储数据时,您可以通过将建筑物的唯一标识符作为密钥的一部分来

我的网站由一个主仪表板页面和一个建筑物列表组成

通过单击一个建筑,它将打开一个新的浏览器窗口,其中包含该特定建筑上的许多功能和特征


在这种情况下,我可以一次打开多个浏览器窗口,每个窗口表示另一栋建筑的数据。如何设置会话数据不会在windows之间混淆

我们使用在给定页面的ViewState中存储ID的组合来测试处理不同窗口数据的复杂会话对象的ID。考虑到不同浏览器在选项卡、页面和会话处理方面的差异,您可以获得一些非常奇怪的行为。

在会话中存储数据时,您可以通过将建筑物的唯一标识符作为密钥的一部分来标识每座建筑物的信息

因此,不要这样做:

Session["Building"] = something;

现在,使用建筑id,您可以始终在当前窗口中找到属于该建筑的适当信息


话虽如此,我还是要问,为什么您实际上需要在会话中存储这个?每次从数据库获取数据不是很便宜吗?我不会担心性能,除非在数据库端有非常昂贵的操作

如果可能的话,可能存在安全问题。恐怕这在现代浏览器中是不可能的,因为主机上启动的全新会话(即:新进程)太容易受到攻击,同时,源浏览器实例(第一个进程)也无法控制。我存储在会话中的不仅仅是buildingID。我正在修改一个现有网站,该网站的功能使用了数百个会话,并且我正在添加一次查看多个建筑的功能。@Diane2是否有充分的理由在会话中存储内容?性能是一个问题吗?数据库调用是否过于昂贵?如果没有,既然您正在重写它,那么就抓住这个机会摆脱这个复杂的逻辑。我使用会话在一个位置设置值,我需要在另一个函数或回发中访问这些值。你能想出一个解决方法吗?@Diane2是的,例如,你可以在URL中传递参数。您还可以将Routing()作为构建封装不同参数的URL的选项,等等。您的问题太广泛,无法给出具体的实现,但希望这些都是有用的指针。Fio,您有什么建议?听起来您的应用程序是“业务线”。因此,您可以定义要支持的浏览器,并对其行为进行编码。为tab/window/session支持多个浏览器变得非常混乱,没有简单的解决方案。
Session["Building_"+buildingID] = something;