2011-11-28 57 views
1

我的asp.net会话对象正在存储在SQL服务器中。我在会话中存储了一个ID。如果客户打开另一个浏览器并在会话中存储不同的ID。我需要通知客户端是“你确定你想让两个ID都打开吗?”在同一个用户登录的用户中。asp.net中的多个浏览器中的服务器会话句柄?

应用程序运行在登录的用户(不是匿名的)

我们如何在asp.net检查这个?

+2

你如何提出要知道,这是同一个客户谁已经打开一个窗口,而不是一个新的人来到该网站? –

+0

随着登录ID,我会知道,谁登录。 – James123

+2

你可能想扩大你的问题,编辑它来解释人们登录,以便你知道这些信息。否则,它会显示您正在询问有关匿名用户打开新窗口的情况。 –

回答

2

有几种方法去这个问题:

选项#1,在你的用户表,添加一个名为“会话ID”

值当,检查用户登录,看看他们的上次会话ID是。然后测试它是否仍然是有效的会话。如果是,请问他们想做什么。每次登录后,将最新的会话ID存储在该表中。

但是,我会选择#2:不要这样做。如果用户想要打开多个浏览器窗口来访问你的应用程序,那么让他们。这可能是一个很好的理由。大多数(几乎所有)用户都不知道“会话状态”甚至意味着什么,他们真的不想知道。他们所关心的是完成他们的工作。

+0

你的选项#2是“什么”而不是“如何” - 当每个单个用户可以有多个会话时,OP询问如何处理情况。出于同样的原因,选项#1也不能很好地工作 - 除非您以某种方式进行会话劫持,否则您无法访问另一个会话中的信息。我相信在OP的情况下,存储临时数据的唯一正确方法是使用某种缓存 – Andrey

4

会话未链接到已验证的用户,并且无法在不知道SessionID的情况下访问其他连接的会话。

通常这种问题可以使用缓存而不是会话状态来解决。通过缓存,您可以创建自己的基于用户的密钥来存储数据。根据您是打算在一台服务器上还是在Web场环境中运行您的Web应用程序,您可以使用asp.net进程内缓存或众多分布式缓存解决方案之一(如我在我的中使用的memcached网络项目取得巨大成功)。