【问题标题】:Authentication of user in multiple browser tabs在多个浏览器选项卡中对用户进行身份验证
【发布时间】:2014-02-10 12:36:39
【问题描述】:

我的任务是解决 SilverLight 应用程序中的错误,但是我的身份验证知识充其量只是基本知识,所以我非常卡住并寻求帮助。

问题在于,如果用户登录到应用程序,然后打开另一个浏览器选项卡/窗口并从应用程序内访问 URL,这是完全可以接受的,并且据我们所知,系统工作正常。当用户从一个选项卡/窗口注销应用程序,然后尝试继续在另一个选项卡/窗口上工作时,就会出现问题,在这种情况下,会根据用户的操作引发各种错误。

我们已经在应用程序中有一个计时器来检测与数据库的连接问题,所以我认为在这里检查用户是否经过身份验证是一个好的开始,所以我检查了AuthenticationService.User.Identity.IsAuthenticated,但不幸的是,这总是正确的。因此,我研究并调试了我的代码,并且一旦Logout 方法完成,该属性实际上设置为false,但是当用户在另一个选项卡上注销后我调试应用程序时似乎并非如此/窗口。

我在互联网上进行了研究,但我能找到的所有类似问题都是由不相关或我不完全理解的东西引起的。

系统使用继承自FormsAuthentication 的身份验证类,但所有LoginLogout 函数都使用基本WCF RIA AuthenticationService 服务方法。

任何人都可以就问题所在提出一些建议吗?

【问题讨论】:

  • 如果您尝试在第二个选项卡中执行任何操作,而您已从第一个选项卡注销,是否会因您已注销而导致任何错误?
  • @CorneaAli 我得到的错误通常是基于服务失败,这是有道理的,因为用户已经注销了AuthenticationService,但应用程序似乎只有在尝试时才“意识到”这一点调用服务。

标签: c# authentication forms-authentication wcf-ria-services


【解决方案1】:

当您注销时,基本上会发生服务器将在服务器内存/会话状态等中销毁您的会话。如果有来自同一客户端的新请求,服务器将读取会话 id cookie 并尝试匹配它与现有会话之一。如果找不到此会话,那么我们将收到您面临的异常。

拥有一个 SilverLight 应用程序,这基本上是一个客户端应用程序,它不会向服务器发送任何请求,直到它真正需要(服务调用)。我认为您应该向所有应用程序实例发送注销消息,以便在其他任何地方的客户端也注销用户。

也许这个链接会对你有所帮助

Can silverlight detect or communicate across browser instances?

Writing a javascript file from another javascript

【讨论】:

  • 我使用了您的一个链接中详细介绍的消息传递系统。大量的工作和测试,但它似乎工作得很好。谢谢。
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 2018-11-05
  • 2012-09-12
  • 2018-05-10
  • 2016-10-02
  • 2020-11-25
相关资源
最近更新 更多