如何在网站上使用会话(session)来管理多个状态(state)?

6
非常感谢您对以下情况的帮助:
Amazon.com是如何管理不同级别的身份验证的,一次是当您访问网站时,另一次是作为安全功能前往“您的账户”->“登录和安全”时?
用户登录(即认证)到网站并且7天内没有任何活动。用户重新访问网站时,用户被要求再次进行身份验证。这可以使用cookie实现,但由于安全问题,它是使用服务器端的会话令牌来实现的。在7天后,当浏览器提供过期令牌时,用户再次被要求重新进行身份验证。
现在,新要求是,如果用户登录并访问“您的账户”页面,则:
1.如果用户仍然停留在“您的账户”页面,并且10分钟内没有任何活动,则应再次要求用户进行身份验证。
或者
2.如果用户退出“您的账户”页面并在10分钟后重新访问“您的账户”页面,则应再次要求用户进行身份验证。
因此,使用令牌,我只能管理一个不活动的时间段,如何处理多个状态,即状态(7天)和部分状态(10分钟)。
如何处理这种情况的行业惯例是什么?不想使用cookie作为安全问题。并且由于正在使用SSO提供程序进行身份验证,因此使用数据库将是最后的选择。
--大卫。
1个回答

4
你如何处理这个问题将取决于你当前的过期会话令牌逻辑的实现细节。一种常见的方法是将会话令牌存储在数据库或内存缓存中。如果是这样,你可以简单地添加一个新列来指示用户打开帐户页面的时间。例如,你的新列可以被称为“accountSettingsStartTime”。通常情况下它没有值,但当用户导航到帐户页面时,它会被填充为当前时间。当用户从帐户页面导航离开时,你可以清除它。然后,当你检查安全令牌时,你只需要检查标准的7天到期以及检查“accountSettingsStartTime”列并确保它在最近10分钟内。
另一种方法是在用户导航到帐户设置时给用户一个全新的会话令牌,并将其有效期设置为10分钟,并强制执行涉及帐户设置的操作使用该令牌。然后,在更改帐户设置时检查该令牌,如果它已过期(并使其标准7天令牌无效),则要求用户重新进行身份验证。当然,这需要客户端付出更多的努力。
正如他们所说,“有很多种方法可以解决问题” :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接