Java 如何维护用户登录会话?
我试图在我的Android应用程序中维护用户登录会话(1小时)。当用户登录时,我从服务器接收登录时间(StartTime)和会话结束时间(Timemout) 我正在使用系统api(System.currentTimeMillis())将收到的登录时间+会话结束时间与当前设备时间进行比较 我的问题是,用户可以通过更改设备中的位置或时钟时间来操作这个系统.currentTimeMillis(),并且可以拥有无限的登录会话 我还尝试使用SystemClock.elapsedRealtime(),它在启动时是可靠的。用户可以通过重新启动设备来重置或操纵时间 是否仍然需要维护1小时登录会话 从服务器接收的开始时间和超时时间 ((开始时间+超时)>(System.currentTimeMillis()/1000)) 或Java 如何维护用户登录会话?,java,android,session,systemtime,Java,Android,Session,Systemtime,我试图在我的Android应用程序中维护用户登录会话(1小时)。当用户登录时,我从服务器接收登录时间(StartTime)和会话结束时间(Timemout) 我正在使用系统api(System.currentTimeMillis())将收到的登录时间+会话结束时间与当前设备时间进行比较 我的问题是,用户可以通过更改设备中的位置或时钟时间来操作这个系统.currentTimeMillis(),并且可以拥有无限的登录会话 我还尝试使用SystemClock.elapsedRealtime(),它在启
((startTime+timeout)>(SystemClock.elapsedRealtime()/1000))这可以在服务器端处理。您可以在服务器上为用户创建会话,该会话将在1小时后超时(在需求中指定) 在这种情况下,您可以通过以下任一方式通知用户会话已注销:
这里的目标是确保您的会话不会超过一定的时间长度,无论您的设备的本地时间是否发生任何日期/时间更改。这里的一个常量是服务器的时间,所以让我们利用它
正如在前面的链接中提到的,System.nanoTime()是一个很好的工具,可用于不受本地时间变化影响的计时器中。更改位置中的更多详细信息不会影响
System.currentTimeMillis()
。当然,更改时钟时间会有影响。您可以让服务器负责跟踪用户的登录时间?这是服务器应该负责的事情。客户端只应将其用作优化,以便为happy case提供更好的用户体验。如果用户超时,服务器应该拒绝请求。@CrazyProgrammerThing您可以使API返回未经验证的响应,当应用程序收到该响应时,它会弹出一个登录屏幕。当他们登录时,他们会被重定向到原始页面,然后重试该请求。@CrazyProgrammerThing是的,您可以在此实例中使用nanoTime。您还可以使用基于它的东西,例如ScheduledThreadPoolExecutor,这样您就不必重新发明轮子。