2010-08-04 27 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中再次查找該信息所需的標識符。

相關問題