如何向有状态的服务器发出请求甚至更好的状态?

时间:2012-02-17 06:25:13

标签: c# asp.net asp.net-mvc asp.net-mvc-2

所以我在选项卡/浏览器中保存唯一的集合时遇到了问题(实际上是标签)。 在ASP中回调后使用静态变量来存储数据不能很好地工作,因为所有浏览器都可以从中读取并修改变量。 使用会话变量不能很好地工作,因为虽然它成功地使集合在浏览器中是唯一的 - 但它在标签之间并不是唯一的。因此,一个Mozilla选项卡可以修改会话变量中的集合(集合更改) - 当再次访问集合时,用户将使用另一个Mozilla选项卡时会出现令人讨厌的惊喜 - 不幸的是SAME集合 - 类似于脏读即可。 所以问题是 - 如何在标签/浏览器之间创建有状态但独特状态的集合,以便每个集合都可以拥有自己独特的集合并可以自由地修改它。

我在这里看到的问题是一个标签不断地创建一个ajax请求,它总是重新创建控制器对象,这意味着它永远不会是唯一的。

另一个想法是在javascript中保存对此集合的引用 - 然后在每个请求期间来回传递此引用 - 问题是如何在不序列化/反序列化的情况下执行此操作,哪种方法会失败,只需保存参考:(

欢迎任何想法。

不起作用的方法:会话,应用程序/静态(尚未尝试应用程序,但似乎行为相同)。 ViewState会工作吗?但它似乎没有保存数据:'(

2 个答案:

答案 0 :(得分:2)

使用自定义路由替换默认路由,该路由将GUID添加到uri。并使用该GUID加载会话。

我在我的博客中为您做了一个例子:http://blog.gauffin.org/2012/02/get-a-unique-session-in-each-browser-tab/

答案 1 :(得分:1)

您可以将信息存储到window.name中,每个选项卡应该是唯一的,因为每个选项卡都是不同的窗口。

演示:http://www.thomasfrank.se/sessionvars.html