什么时候我应该使用PHP会话vs浏览器本地存储vs JavaScript对象参数


When should I use PHP Session vs Browser Local Storage vs JavaScript Object Parameters?

什么时候适合使用现代基于AJAX的应用程序存储数据的多种不同方式?我希望有一些具体的指导方针,我可以给开发人员。这是我目前看到的,它越来越乱了。

PHP服务器端会话: PHP会话数据可能是存储基于会话的信息的最古老的方式。我经常通过JavaScript/jQuery对象的各种AJAX调用传递参数-存储在PHP Session中。我还返回数据对象(一些会话信息)通过响应/结果返回到JavaScript/jQuery方法。

基于浏览器的本地存储:这通常用于存储需要在前端持久化的数据,但我有时不确定何时使用它。一个很好的用途是存储来自navigator.geolocation的地理位置信息。我在这里存储了很多信息,但我不确定这是否明智。它似乎永远不会过期,但可以从资源中删除。

JavaScript对象配置参数(s):我一直在构建JavaScipts对象与init方法设置一个'settings'参数。这是非常有用的,因为我通常是从PHP传入的数据构建它。使用jQuery Mobile,这些数据甚至可以从一个页面保存到另一个页面,并随着AJAX请求响应而更改。

那么,对于这两种用法,你会给出什么指导方针呢?

PHP会话数据不是永久数据存储,因为当您破坏浏览器会话时,您将丢失数据。这是有用的,如果你没有要永久存储数据。

浏览器本地存储是永久的,除非您自己删除数据或清除浏览器缓存。有些用户会不时地清除缓存,所以这可能是一个问题。

任何其他方法(如object)都不是永久数据存储。

其他与浏览器相关的永久存储是COOKIES(如果你不这样做)IndexedDb(查看当前浏览器支持http://caniuse.com/#feat=indexeddb)。

所以取决于你需要决定你的网站或应用程序需要的数据短时间存储,长时间存储或永久存储,直到您手动删除它。

作为一个例子,如果您正在存储,您将使用LocalStorage书签,如果你在存储地理位置点,你使用cookie并在关闭浏览器或应用程序后过期。

如果你正在使用PHP登录一个帐户,那么最好的做法是创建一个PHP会话,甚至在用户单击时更改会话超时时间(记得我).

这些只是数千种可能需求中的几个例子。