ASP.NET MVC中多个浏览器选项卡中的唯一会话

前端之家收集整理的这篇文章主要介绍了ASP.NET MVC中多个浏览器选项卡中的唯一会话前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
每当用户在ASP.NET MVC应用程序中打开新的浏览器选项卡或窗口时,我想创建唯一的会话.是否可以在ASP.NET / MVC中使用?

我试着按照下面的解决方

asp.net – session – multiple browser tabs – different sessions?

但它在ASP.NET MVC中不起作用.上面的解决方案使用ViewState,在MVC中我尝试使用TempData,但它不起作用.

解决方法

多年后我终于找到了解决这个问题的方法

1.)浏览器必须自己提供ID,因为http是无状态的,cookie不是单独存储在浏览器选项卡中,因此asp.net会话也不区分单个选项卡.

2.)打开新选项卡时,JS window.name为”.将window.name更改为某个值后,只要该选项卡处于活动状态并且某些代码未更改它,它就不会再更改.

所以解决方案是:在* .master或每个* .aspx文件中实现一些简短的JS代码

if (typeof window.name != undefined) {
             if (window.name == '') {
                 var d = new Date();
                 window.name = '_myWnd_' + d.getUTCHours() + d.getUTCMinutes() + d.getUTCSeconds() + d.getUTCMilliseconds();
             }
             var eDiv = document.getElementById('div_BrowserWindowName');
             var e = eDiv.getElementsByTagName('input')[0];
             e.value = window.name;
         }

还要添加* .master或每个* .aspx文件的表单部分:

<div id="div_BrowserWindowName" style="visibility:hidden;">
                <asp:HiddenField ID="hf_BrowserWindowName" runat="server" />
            </div>

现在,您可以通过在每次回发后读取隐藏字段来检索window.name == UNIQUE ID,即使用户从一个站点跳到另一个站点并在几小时后返回到表单也是如此.

猜你在找的asp.Net相关文章