最近引起我注意的是,用户可以使用两种不同的浏览器(例如Chrome和FireFox。当他使用Chrome更改密码时,FireFox会话也应该注销。现在还没有。
我正在使用ColdFusion cookie和会话变量进行登录。一个如何检测并踢出另一个会话(未更改密码的会话)?如何使用ColdFusion完成此操作?
答案 0 :(得分:0)
如果您跟踪密码更改,则可以在会话中放置一个passwordLastUpdated
键。如果会话不包含该密钥,则将其注销。如果您还在会话中保留loginTimestamp
,则可以检查当前登录会话是否在passwordLastUpdated
之后,并强制执行新的登录。
您应该跟踪密码的更改以及用户之前3个左右的密码的哈希值,以确保它们不重用最近的密码。
说明:
在数据库中,您应该跟踪上次更改用户密码的时间。用户登录时,将该值添加到ColdFusion会话数据的新密钥中。如果您的user
数据存储在session.user
中,则创建一个新密钥:
session.user.passwordLastUpdated
现在,在onRequestStart
中或您检查用户是否具有有效会话的任何地方,还要检查
<cfset bValidSession = true>
<cfif !structKeyExists(session.user, "passwordLastUpdated">
<cfset bValidSession = false>
<cfelse>
<!---
if the timestamp in passwordLastUpdated
is newer than then time when the user last logged in.
--->
<cfset bValidSession = false>
</cfif>
<cfif !bValidSession>
<!--- Do your log out process. --->
</cfif>
另一个浏览器中的会话在session.user
中将没有此密钥,它将在下一个请求时注销。