2010-08-04 28 views
1

您可以用JSON保护Web应用程序状态URL是这样的:是否最好使用URL中的JSON保存Web应用程序状态?

 
    http://host/?state=[{id:1,selected=true},{id:2,selected=false}] 

这是最好?

这样做的一个动机是,如果用户在网页上书签,网页应用程序状态可以在用户下次访问该页面时恢复。

回答

1

这可能是可行的,但我认为这是有点不好的做法怎么一回事,因为:

  • 你暴露了很多的技术细节,你的Web应用程序的最终用户
  • 你确定你使用安全的JSON解析?否则,你的应用程序打开JavaScript注入攻击。
  • 迟早你一定会打URL字符编码问题
  • 您的网址不是很描述(见http://css-tricks.com/guidelines-for-uri-design/

我的建议是:为state创建一个ID绑定到存储在数据库中的JSON (您的网址看起来沿http://host/?state=123线条更与123指向某种数据库记录(不,它使URL的交通十分便利之一,但我仍然认为这是由于引用了其他点)更好。

+0

因此,如果我在做一个AJAX请求,我应该发布JSON?然后在服务器端,我应该存储状态并返回状态ID?然后,我可以使用jQuery BBQ将后续URL更新为'http:// host /#state = 123':返回按钮和查询库(http://benalman.com/projects/jquery-bbq-plugin/)? – knut 2010-08-04 08:55:30

+0

啊,是的。忘记那部分。也许是主观的,但我认为发布你的JSON比获取它总是更好。上面的插件看起来像是一个理智的选择(从快速浏览)。 – 2010-08-04 09:03:59

+0

因为“jQuery BBQ利用了HTML5 hashchange事件”而不是所有的浏览器都支持html5,所以只需要注意库。 – 2010-08-04 11:35:15

0

您必须解析JSON字符串以获取所有数据,这可能有点复杂。但是你可以这样做,如果你不想使用它自己的查询字符串(也许这个结构太过简单)。 但请记住:查询字符串的长度有限!

0

你解决方案很好,我只是f新点为你。

一个问题是URL的长度。不同的浏览器有不同的限制。如果您必须这样做,并且您的网址的长度接近2000个字符,则可能会出现问题。如果您的字段名称占用太多空间,请改为使用固定的字段顺序。省略不需要书签的字段。在极端情况下,请考虑使用gzip算法来压缩您的长URL。然后仅使用URL中合法的字符在base64中重新编码该二进制数据。当您在下次访问时再次解压缩URL时,这会带来一些CPU时间的成本。

另一种方法是将状态信息存储在文件或数据库中。然后,您只能存储在URL中再次查找该信息所需的标识符。

相关问题