SaaS应用程序中的用户会话超时处理-讨论几种方法
我知道这很有可能被标记为重复,但是找不到我要找的东西 这是一个常见问题,我敢肯定它有一些定义明确的最佳实践解决方案 背景 单个页面的SaaS应用程序具有很多拖放功能,用户可以在不进行大量服务器通信的情况下与之交互 服务器会话仅使用非持久会话cookie来保存用户对象 X小时后,会话在服务器上到期 有些东西仅在登录时加载 问题 用户在应用程序上工作,完成后,用户不会注销,只是保持浏览器保持打开状态 用户超过X个小时后返回(会话在服务器上无效) 用户无需服务器连接即可与应用进行交互(拖放内容,文本编辑...) 仅在下一次服务器交互时(假设没有自动保存),用户将被抛出到登录页面,并丢失一些工作 可能的解决方案 这是我想到的一些解决方案,想听听是否还有其他解决方案,以及其中是否有任何根本性的错误。 1.永远不要注销用户 怎么样?保持长时间的会话,保持持久的cookie或javaScript“保持活动” ping 优点:用户无需担心任何事情,可以为他们解决问题 缺点:不符合PCI标准,不安全,并且需要进行开发更改,例如仅在用户登录时加载到会话的内容需要转移到pub子模型(侦听事件更改)或具有缓存超时。 2.本地存储 怎么样?如果注销,使用新的本地存储临时存储状态,重定向到登录页面,登录后永久保存 优点:也是“离线工作”支持的基础,而不仅仅是处理会话超时 缺点:难以实施,需要对数据树进行状态合并,并非所有浏览器都支持 3.自动保存 更改模型的每个用户操作都应立即保留(或通过某种客户端队列),例如,如果他们选中了复选框,更改了文本字段或拖放了某些东西,则一旦完成,就保留更改。 怎么样?使用MV **框架(Backbone.js / Knockout.js / Ember.js / Angular.js等)绑定模型,并坚持更改。 优点:似乎是一个干净的解决方案,只要用户处于活动状态,会话就处于活动状态,如果不坚持下去,则不会进行任何客户端工作。 缺点:会话超时丢失后,用户上一次执行的操作。 4.会话过期后注销用户 这可以有几种方法 询问服务器“会话已过期”-这有点像22 /薛定inger的猫,因为服务器的唯一问题是延长了会话(重新启动超时), 怎么样?要么有一个服务器支持这样的问题(我什么都不知道,但是我来自Java领域),或者可以只保留一张会话ID表,手动上一次访问时间,然后通过传递会话来询问服务器。 ID作为参数而非cookie的参数,我不确定这是否可行,但是听起来很危险,不安全且设计不佳。 优点:如果服务器中有这种本机支持,这听起来像是一个干净,合理的问题(询问用户X是否仍然有会话,如果有则不进行更新) 缺点:如果服务器不支持它(同样,我不知道是否有服务器或框架具有此功能),则解决方法可能会带来巨大的安全风险。 我听说的一种解决方法是在服务器端进行一次简短会话,并在客户端ping保持活动状态ping,最多可以ping 怎么样?服务器上的简短会话,客户端ping每个sessionTimeOut / 2,最大重试次数为Y。 优点:可以解决问题,快速又脏 缺点:感觉像黑客一样,自己处理会话续订而不是让服务器执行 客户端计时器 …