java - AppEngine 网站中的在线用户

标签 java google-app-engine session struts2

用户可以使用其 Google、Facebook 或 Twitter 帐户登录到在 Google App Engine 中运行的网站。用户 session 已经实现,并且三个身份验证提供程序(Google、Facebook、Twitter)已经开始工作。

我的下一个任务是检查用户在查看其个人资料时是否在线。如何实现这一点呢?如果您有任何想法,请告诉我。

此外,当用户登录该网站时,我将其电子邮件保存到 session 中,如下所示:

session.put("email", email);

另一件需要考虑的事情是用户 session 何时超时。如果用户的 session 由于长时间没有在网站上进行交互而自动超时(未使用网站中提供的注销菜单/按钮),我们是否可以采取一些措施?

使用的框架是 Struts2,在 Google App Engine 中运行。

谢谢。

最佳答案

由于 HTTP 是基于请求的,而不是基于 session 的,因此无法知道用户是否“在线” - 简而言之,HTTP 没有“在线”用户的概念。

执行此操作的过于复杂和高开销的方法是使用 Channel API 之类的东西在用户离开页面(或您的网站)时通知您,但这对于一个简单的功能来说是很大的开销。您还可以让用户的浏览器在打开页面时定期对您进行 ping 操作,但这又会导致大量开销和额外流量。

更常见的方法是在数据存储中存储针对用户的记录(或者仅在内存缓存中,如果用户被错误地标记为离线,这不是非常重要),记录他们上次加载页面的时间,并更新该记录每当他们从您的网站获取页面时。然后,如果用户在某个合理的时间间隔(例如半小时)内检索到页面,则将用户显示为“在线”,否则显示为“离线”。

关于java - AppEngine 网站中的在线用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11182383/

相关文章:

session - 什么是 LU session ?

java - 桥接方法解释

java - 如何使用 gson 创建一组键值对?

node.js - Google Cloud 上的环境变量?

java - GAE 上 Memcache 的写回策略

security - 如何进行最安全的Websocket认证

java - SugarCRM 关系可从活跃的机会中获取联系人

java - VideoView 添加多个视频并播放

google-app-engine - Appengine with Go : Is there a http. Handle prehook 或类似的东西?

node.js - 除非 Passport.js 被初始化,否则 session ID 不会持续存在