一个网页,两个经过身份验证的用户

时间:2015-03-22 20:30:13

标签: c# asp.net-mvc cookies

我提前道歉,不包括任何代码,因为问题是如此不寻常,我无法找到任何关于它的正确信息,我也很难绕过它。如果问题表明我对你的理解非常缺乏理解,那你又笑了起来,我也道歉......

想象一下,如果你愿意的话,一个"多人游戏"网页。有一个登录页面,用户可以登录,他或她的名字在某处显示,cookie已设置。到目前为止,没有火箭科学。

现在让我们进一步了解:一旦用户登录,SECOND用户应该能够登录并且还应该在页面的另一半显示他或她的用户名,让我们说吧。

让我们暂时假设他们每个人都有半页工作,这样你就可以直观地了解会是什么样子。就像打开两个文本编辑器一样,让我们​​说吧。

那么......我该如何处理?我是否写了一个谚语

ApplicationSignInManager.MultiSignIn(ApplicationUser user)
然后是另一个

AuthenticationManager.SignIn

然后重写它下面的整个shebang,直到我得到一个有两个用户的cookie?这真的那么简单吗? (顺便说一句,我使用ASP.NET MVC 5)

或者我的理解是如此缺乏,以至于我不应该考虑这个?

问题是:用例在那里。我需要来构建它,任何方式。我只是无法弄清楚如何接近它......你呢?

修改

  • 总会有有限数量的人与此网页互动。让我们暂时假设最多2个。
  • 是的,这两个人将在SAME计算机上,每个人只与他们自己的一半屏幕进行交互。

2 个答案:

答案 0 :(得分:1)

在网络编程方面,你似乎对一些核心概念感到困惑。

我将假设第二个用户第一个用户不在同一台计算机上。

多个用户当然可以使用FormsAuthentication附带的默认ASP.NET登录。 Cookie无法解决任何,因为Cookie是"每个用户"。

这是一个有点复杂的问题,因为您所描述的内容需要非常亲密的客户端/服务器关系。

我假设您希望在用户登录时收到通知;当另一个使用已登录而不是在下一页重新加载时。这需要某种 Web服务或至少一些ajax请求。

第一步(然而)将是" flag"以online登录的用户,当用户登录时,以这种方式将用户标记为not-online,您可以通过Web请求随时获取在线用户。您决定存储用户的方式无关紧要;只需确保您可以将其标记为online / not-online

获得在线用户的最简单方法是通过ajax 使用jQuery:

$.get('users/OnlineList', function (data) { 
    // Let's just assume that "data" is just a comma-separated string of users.
    $('div#online-users').text(data);
});

然后每隔x秒通过setInterval或类似方式执行此操作。这是hacky和丑陋,但它的工作原理;这是有多少人这样做的。


但回到手头的问题。

我看到的方式;最好的方法(如果它总是两个人)。当User-A登录时,User-A会被放入Lobby-1,以便拥有某种" lobby"系统。当User-B登录时,此用户也会被加入Lobby-1Lobby-1现已关闭,不再有人加入。 User-CUser-D放在Lobby-2中,依此类推。

总之:

  • 你有一个很酷的主意,但你的方法是错误的。
  • 您需要将用户存储在某种类型的数据库中,并带有离线/在线标记
  • 您需要立即轮询数据库,然后查看哪些用户在线
  • 如果您希望两个以上的用户能够同时使用您的服务,则需要为用户开发某种 lobby 系统。
  • 您需要了解网络编程的基础知识

我希望我的答案有所帮助!

答案 1 :(得分:0)

如果第二个用户已登录并执行某些操作(显示用户名),则网页应检查Web服务器/数据库。如果您需要更多信息,请告诉我。

我们假设您有一个登录页面,并且在成功登录后,它会更新表格中的记录" user"在列"登录" to" true"。让我们假设您在主页面上有一个自动收录器,显示所有已登录的用户。如果您导航到主页面,页面将选择列为"已登录的所有用户" ="真实并计算它。结果保存在变量中并显示在站点上。

如果您想了解某些内容,则必须将其保存在数据库或“静态”中。变量