Jam*_*hen 5 php mysql session ios
我正处于构建 php/mysql 后端的初始阶段,该后端向网站和 iphone/android/等设备公开 REST 接口。
我不太确定处理使用同一帐户的多个设备的会话的“标准”或“最佳实践”是什么。
以下是我目前对其如何运作的想法:
我现在会使用 MySQL 来存储会话,会话表如下所示:
id、session_id(哈希)、user_id(int)、创建(时间戳)、过期(时间戳)、设备(枚举)
当用户通过 iOS 应用程序或 Android 应用程序登录时,我会在 success json 中返回一个会话令牌,以供将来的 api 调用使用。与网站进行 api 调用相同。
出于安全目的,如果用户重新登录,我应该重新生成并覆盖会话令牌,但仅限于该设备的 session_id。
我还有一个过期列,它告诉我会话的过期时间,这样,如果我愿意,我可以创建一个可以在两周内过期的会话,并由 CRON 作业定期清理。
这对我来说似乎是一个合理的方法,但如果用户使用 iPhone 和 iPad,或者使用同一帐户的多个 Android 设备,则会出现问题。任何时候用户使用其中一个登录都会导致另一个用户注销。
我注意到即使我从另一部 iPhone 登录,Instagram 也不会使会话无效。
但是,我认为我无法复制该行为,除非我在用户重新登录时从不覆盖会话令牌,或者每当用户从 iphone 登录时不断将会话行添加到我的会话表中?
跨不同设备处理会话的标准方法是什么?
小智 4
我强烈建议您不要使用 mysql 来存储会话。我建议使用 redis 或 memcache。Redis 会将数据存储到磁盘,以防服务器崩溃。Redis 还允许您设置 TTL 以使会话过期,这将解决#4。
如果您使用基于休息的调用,我建议只需将会话作为 cookie 添加到标头并来回传递。基本上模拟浏览器访问该页面的方式。我认为这也会使测试变得更容易。