【发布时间】:2015-12-29 20:26:27
【问题描述】:
在我的应用程序中有这个文本 Last seen: 字段显示当前用户登录系统的时间(例如 5 秒前、4 小时前、3 天前等)。现在我要这样做,我需要确定:
- Apache Shiro 执行登录的时间;或
- 当前 Grails 会话的创建时间。
然后将其减去当前时间。但是如何访问两者中的任何一个的创建时间?或者有没有更好的方法来实现这一点而不使用上面提到的?
【问题讨论】:
标签: grails httpsession
在我的应用程序中有这个文本 Last seen: 字段显示当前用户登录系统的时间(例如 5 秒前、4 小时前、3 天前等)。现在我要这样做,我需要确定:
然后将其减去当前时间。但是如何访问两者中的任何一个的创建时间?或者有没有更好的方法来实现这一点而不使用上面提到的?
【问题讨论】:
标签: grails httpsession
在你的控制器动作中你可以这样写:
class MyController {
// Considering this action is secured for logged in user only
def foo() {
long currentMillis = new Date().getTime()
long sessionCreationMillis = session.getCreationTime()
long loggedInFor = currentMillis - sessionCreationMillis
println "User has been logged in for $loggedInFor miliseconds"
}
}
现在,您了解了用户登录的时间(以毫秒为单位)。此外,您可以使用 TimeUnit 库将毫秒转换为其他值。
或者,如果您打算在客户端执行此操作,也可以使用任何 Javascript 库,例如 this。
【讨论】:
我不知道 Apache Shiro,但我可以告诉你如何获得 session creation time。
其实很简单,在HttpSession中有一个叫getCreationTime()的方法。这是doc
您可以在控制器中可用的session attribute 上调用此方法。这会将时间以毫秒为单位返回为long。
【讨论】: