在Coldfusion中更改密码后如何注销其他会话

时间:2019-07-15 04:27:02

标签: session authentication coldfusion coldfusion-10

最近引起我注意的是,用户可以使用两种不同的浏览器(例如Chrome和FireFox。当他使用Chrome更改密码时,FireFox会话也应该注销。现在还没有。

我正在使用ColdFusion cookie和会话变量进行登录。一个如何检测并踢出另一个会话(未更改密码的会话)?如何使用ColdFusion完成此操作?

1 个答案:

答案 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中将没有此密钥,它将在下一个请求时注销。