我正在建立一个PHP/MySQL后端,为网站和iPhone/Android等设备提供REST接口的初始阶段。我不太确定在处理使用同一帐户的多个设备的会话时,“标准”或“最佳实践”是什么。
以下是我目前关于如何解决这个问题的想法:
1. 我将使用MySQL来存储会话,使用类似下面这样的sessions表: id、session_id(哈希)、user_id(整数)、created(时间戳)、expire(时间戳)、device(枚举) 2. 当用户通过iOS应用程序或Android应用程序登录时,我将返回一个会话令牌到成功JSON中,以便未来的API调用使用。网站进行API调用时也一样。 3. 为了安全起见,如果用户重新登录,则应重新生成并覆盖该设备的session_id,但仅限于该设备的session_id。 4. 我还有一个过期列,告诉我会话的过期时间,因此如果需要,我可以创建一个会在两周内到期并由CRON作业定期清理的会话。
这对我来说似乎是合理的方法,但是如果用户使用iPhone和iPad或多个使用同一帐户的Android设备,则会存在问题。任何时候,用户通过其中一个设备登录都会导致另一个设备注销。我注意到Instagram即使我从另一个iPhone登录,也不会使会话失效。但是,我认为我无法复制这种行为,除非当用户重新登录时,我从不覆盖会话令牌或在iPhone上每次登录时都向我的会话表中添加新的会话行?
处理跨不同设备的会话的标准方法是什么?
以下是我目前关于如何解决这个问题的想法:
1. 我将使用MySQL来存储会话,使用类似下面这样的sessions表: id、session_id(哈希)、user_id(整数)、created(时间戳)、expire(时间戳)、device(枚举) 2. 当用户通过iOS应用程序或Android应用程序登录时,我将返回一个会话令牌到成功JSON中,以便未来的API调用使用。网站进行API调用时也一样。 3. 为了安全起见,如果用户重新登录,则应重新生成并覆盖该设备的session_id,但仅限于该设备的session_id。 4. 我还有一个过期列,告诉我会话的过期时间,因此如果需要,我可以创建一个会在两周内到期并由CRON作业定期清理的会话。
这对我来说似乎是合理的方法,但是如果用户使用iPhone和iPad或多个使用同一帐户的Android设备,则会存在问题。任何时候,用户通过其中一个设备登录都会导致另一个设备注销。我注意到Instagram即使我从另一个iPhone登录,也不会使会话失效。但是,我认为我无法复制这种行为,除非当用户重新登录时,我从不覆盖会话令牌或在iPhone上每次登录时都向我的会话表中添加新的会话行?
处理跨不同设备的会话的标准方法是什么?