【问题标题】:Should server side timeout be implemented?是否应该实现服务器端超时?
【发布时间】:2015-08-26 09:35:32
【问题描述】:

我正在构建一个 java + angularjs 应用程序。我已经在客户端实现了会话超时,如果用户在 30 分钟内没有任何活动,它会向服务器发送一个过期会话令牌的请求。

是否应该在服务器端单独存在超时,即如果与服务器的连接在 5 小时或一天内没有关闭,则自动使服务器端的会话令牌过期并通过发送 401 将用户注销?

想到的另一种情况是,如果我将 API 与其他应用程序分开使用,我的 API 是否应该永远不会超时?或者它应该有一个会话持续时间,因为我在服务器端管理会话令牌。

【问题讨论】:

  • 服务器端负责会话超时。否则恶意(或损坏)客户端可能会导致服务器出现问题(例如在服务器上创建 100000 个会话并且不超时)。
  • 当然。服务器端超时应该比客户端超时更激进。服务器是消耗多个每个会话资源的服务器。客户端只有一个会话。

标签: java angularjs session-timeout


【解决方案1】:

恕我直言,使用TTL 将会话令牌保存在您的服务器中(生存时间,基本上,如果在一段时间内没有任何活动,您的令牌将从您的数据存储中删除)将是最好的方法。许多数据存储都有实现这一点的机制,当TTL 过期时,它会自动删除会话令牌;对于这种情况,我建议Redis。需要在服务器端保持会话安全。

如果您为不同的应用程序提供 API,那么使用相同的机制是有意义的。只要用户登录到您的系统并且已经通过您的系统授予了另一个应用程序的权限,您就可以登录另一个应用程序。

【讨论】:

  • Redis 有 TTL,但没有滑动过期,因此您必须自己在服务器端或使用 lua 脚本在 Redis 上实现它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多