我想登錄到Laravel5編寫的RESTful後端服務器,單頁前端應用程序利用Polymer的自定義元素。如何在Polymer SPA中保留後端會話信息
在這個系統中,持久性(CRUD)層位於服務器中。所以,認證應該在服務器端響應客戶端的api請求。當請求有效時,服務器以JSON格式返回User對象,包括用戶在客戶端的訪問控制角色。
在這裏,我的問題是我如何保持會話,即使用戶刷新前端頁面?謝謝。
我想登錄到Laravel5編寫的RESTful後端服務器,單頁前端應用程序利用Polymer的自定義元素。如何在Polymer SPA中保留後端會話信息
在這個系統中,持久性(CRUD)層位於服務器中。所以,認證應該在服務器端響應客戶端的api請求。當請求有效時,服務器以JSON格式返回User對象,包括用戶在客戶端的訪問控制角色。
在這裏,我的問題是我如何保持會話,即使用戶刷新前端頁面?謝謝。
這是聚合物以外的問題,甚至只是單頁面應用程序。問題在於如何在瀏覽器中保留會話信息。使用SPA時,它會更容易一些,因爲您可以將身份驗證令牌保存在內存中,但傳統的Web應用程序自一開始就有此問題。
你有你需要做兩件事情:
有幾種方法可以做客戶端存儲。目前最常見的是餅乾。由於瀏覽器存儲它們時沒有太費勁,只要訪問cookie註冊的域名就可以顯示它們,這很容易實現。許多客戶端和服務器端auth庫都是圍繞它們構建的。
替代方案是html5本地存儲。根據您的目標瀏覽器和支持,您可以考慮使用它。
還有一些方法可以使用URL參數進行播放,但當有人切換頁面時,您可能會失去它。它可以工作,但我傾向於避免這種情況。
我還沒有看到任何直接處理cookie的組件,但建立它不應該太難。
這是我用於最近的應用程序的cookie管理代碼的要點。隨意包裝它建立一個cookie組件管理..只要你共享相同!
https://gist.github.com/deitch/dea1a3a752d54dc0d00a
UPDATE:
component.kitchen在這裏有一個存儲組件http://component.kitchen/components/TylerGarlick/core-resource-storage
的最簡單方法)。 PHP會將用戶信息存儲在服務器上,並自動生成一個瀏覽器隨任何請求發送的cookie。使用一臺沒有負載平衡的服務器,會話數據是本地的,速度非常快。
謝謝!你是對的。我發現,即使是api請求,一旦登錄到服務中,會話變量將通過COOKIE傳遞,並在Laravel 5中保留兩個小時。因此,只要有後續的api請求服務器在兩個小時內,COOKIE延長其使用壽命。 – appkr 2015-04-02 13:05:49
但是,我也發現我寫的題目很差。它應該類似於「在刷新客戶端後保持從後端返回的用戶數據」。這意味着,就api請求而言,一旦客戶端得到認證,就沒有限制做出另一個api請求。但是從服務器返回的用戶對象不見了。 – appkr 2015-04-02 13:12:43
我想有兩種簡單的方法可以做到這一點: - 服務器端:如果你的服務器主要是做REST請求,你可以在你的html頁面直接在onload事件中發送用戶對象,如果用戶連接的話:(在你的內部html模板,使用類似window.onload = function(){user = {'從服務器生成的JS代碼是一個用戶連接'};} 我不知道Laravel,但如果你有某種模板引擎它可以在用戶連接的每個HTML頁面上顯示一些JS,它可以工作在 - 客戶端有會話存儲(僅限HTML5瀏覽器)。詳細信息請參閱deitch msg – BLASTOR 2015-04-03 22:06:26
感謝您的解釋和建議。 我明白了。 - ** option1 **:當index.html被命中以重新填充用戶對象*時(只有當它被刷新命中時),客戶端必須發出api請求。 - **選項2 **:客戶端必須將用戶對象存儲在特定時間的某個地方。 – appkr 2015-04-02 13:26:16
很高興。很多,是的。我必須在接下來的幾周內將一個Angular應用程序轉換爲Polymer,客戶端存儲是其中的重要組成部分,因此我們將看到它在現實世界中的表現如何。 – deitch 2015-04-02 13:50:31