我正在構建一個將REST接口公開給網站和iphone/android/etc設備的php/mysql後端的初始階段。如何處理跨不同設備的會話?
我不太確定處理多個使用相同帳戶的設備的會話的「標準」或「最佳做法」是什麼。
下面是我對如何做到這一點的工作電流的想法:
我會用MySQL來存儲會話現在,與會話表所示:
ID,SESSION_ID(哈希),USER_ID(INT),創建(時間戳),到期(時間戳),設備(枚舉)
當通過iOS應用或Android應用用戶登錄,我會返回一個本身在未來的api調用中使用成功json中的ssion令牌。與網站進行api通話一樣。
出於安全考慮,如果用戶重新登錄,但只爲該設備的session_id,我應該重新生成並覆蓋會話令牌。
我也有一個expire列,告訴我會話過期,所以如果我願意,我可以創建一個會在兩週內過期並由CRON工作定期清理的會話。
這似乎是一個合理的做法給我,但如果用戶使用的iPhone和iPad的,或使用同一帳戶的多個Android設備有問題。任何時候用戶登錄一個會導致另一個登出。
我注意到,即使我從另一個iphone登錄,instagram也沒有使會話失效。
但是,我不認爲我可以複製該行爲,除非我從不重寫會話令牌,當用戶重新登錄或保持添加會話行到我的會話表時,每當用戶從iPhone登錄?
在不同設備上處理會話的標準方式是什麼?
您可以隨時在每個會話中存儲一些額外的信息,例如瀏覽器和IP地址 - 只有在登錄新位置時清除具有匹配詳細信息的會話。 – BenOfTheNorth