【问题标题】:How to disable overriding of cookies?如何禁用覆盖cookie?
【发布时间】:2014-08-16 18:59:24
【问题描述】:

我是网络开发的新手。我正在使用 asp.net Web API 和 Angular 我在用户登录时使用令牌身份验证我在 cookie 中设置令牌并在每个请求中发送它直到现在一切正常但如果用户在同一个浏览器中重复选项卡并使用两个不同的帐户登录,cookie 设置为最后登录的帐户,因此两个帐户的令牌变得相同。我怎样才能将它们分开

【问题讨论】:

  • 我不相信你能做到这一点。 cookie 是由域请求的,而不是由浏览器窗口/选项卡请求的。因此,浏览器中的每个选项卡都可以访问您的域的 cookie,并且读取/写入一个用户帐户的 cookie 将始终覆盖另一个用户帐户的详细信息。你能重新思考你的方法吗?为什么您需要能够同时登录两个帐户?
  • 你说得对,但我怎么能同时使用两个帐户登录

标签: javascript asp.net angularjs asp.net-web-api


【解决方案1】:

在每个页面请求的自定义标头中包含当前登录用户的用户名。然后在从客户端到服务器的每次调用中,通过 Angular 在自定义标头中再次发回用户名(使用拦截器)。

在服务器端,当一个请求进来时,根据请求头比较登录用户在会话中的用户名和登录用户的名字。如果请求标头与会话不匹配,则您知道用户在新选项卡上登录了不同的帐户。返回错误。

注意:如果您确实希望能够打开一个新选项卡而不共享 cookie(对 QA 很有用),请以隐身模式或在单独的浏览器中打开新选项卡(即,如果你使用chrome,然后使用firefox)。

【讨论】:

  • 在服务器端,我有 ActionFilterAttribute 拦截每个请求以验证具有用户 ID 等的令牌以及 API 中具有当前用户对象的基本控制器。所以你想让我创建另一个过滤器来检查令牌中的用户 id 是否等于从 Clint 发送的用户 id。!
  • 如果您介意尝试使用 Facebook 之类的功能,您不能在同一个浏览器上打开多个帐户,但您可以在不同的浏览器中打开它们
  • @MohamedAbbas,您不想验证来自客户端的令牌和来自客户端的用户 ID。验证来自客户端的用户标识与用户登录时存储在服务器会话内存中的用户标识。
猜你喜欢
  • 2021-09-06
  • 2016-05-25
  • 2014-04-21
  • 2019-08-15
  • 2013-01-31
  • 2022-01-23
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
相关资源
最近更新 更多