如何捕获从多个页面打开应用程序的用户

时间:2010-12-17 15:02:52

标签: c# asp.net session

在我的网络应用程序中,有些用户在多个浏览器页面中打开应用程序。如何在用户时抓住用户?

编辑我为什么需要这样的东西:我有一个名为DealerID的变量,在带有session的页面之间传递。一些用户想要:“当我在一个页面中使用DealerID创建我的作业时,在另一个页面上使用另一个DealerID创建其他作业”

我试着解释一下。我希望,这会有所帮助。

5 个答案:

答案 0 :(得分:3)

您需要关注的真正的事情是修复您的应用程序以支持多个标签/页面。

我建议您将会话数据存储到应用程序的页面中,并在页面将其提交回服务器时重新构建它。这样,每个页面都可以使用相同的会话变量来传递页面,而不会在系统中创建副作用。

会话数据确实应该是真正的全局数据,可以毫无顾虑地引用。如果您假设只有一个页面会使用它而创建的“长持久”数据,那么您将遇到一些麻烦。

答案 1 :(得分:3)

会话是用于此用例的错误。您应该让浏览器实例告诉您每个请求期间DealerID是什么。您可以使用查询字符串,viewstate,页面上的下拉列表/字段等来完成此操作。

原理:会话通过共享cookie绑定到浏览器的所有实例,这会导致此问题。查询字符串或ViewState,或页面上的字段将数据绑定到浏览器窗口的特定实例。通过使用此方法,您可以完全消除问题并使用设计的技术。

答案 2 :(得分:2)

从技术上讲,除非他们自己告诉你,否则你无法找到谁开了多个页面(HTTP是无连接的)!

我认为这是执行工作的问题(如何有效地进行)而不是最好的技术防篡改解决方案。所以:

在页面上放置一个小AJAX控件(JavaScript代码)作为客户端的信号组件,并说Blah..Blah ....

使用Session个对象(ASP.NET将为您处理正确的会话密钥/值,只需在服务器端使用它)如果有来自单个客户端的两个信号,则您已捕获( !)他们如你所愿。高级用户可能会禁用此防御机制,但您可以通过实施更复杂的方式来提高价格。

我建议不要立即作出反应。在业务逻辑中标记用户并稍后显示帐单。这更有效,即StackOverFlow.com做:)

答案 3 :(得分:1)

我会将一个令牌绑定到您发送到浏览器的对象,并将它们存储在数据库中,并引用用户及其请求的对象。

我会发送每个请求的令牌并将其嵌入页面上的隐藏字段。然后使用javascript将令牌挂钩在任何回发上。如果令牌不止一次返回,您就会有额外的标签!

答案 4 :(得分:1)

鉴于您希望计算用户同时打开应用程序的选项卡数量,问题在于确实没有一种好方法。最好的方法可能是在本地运行,但由于不同的浏览器编码方式不同,没有一种好方法可以让标题知道用户正在使用哪个浏览器并进行API调用以查找out(如果有的话!)。

如果你只需要一个基本的,粗略的,估计计数可能是什么。您可以尝试在加载应用程序时设置cookie(在新选项卡中加载它必须使cookie重置)并使用IP地址交叉引用每个会话的GUID。但是,由于多个用户可能使用相同的IP地址,可能使用多个浏览器,会话可能会超时等,因此这种情况永远不会非常准确。