2014-12-02 84 views
4

我沒有獲得概念web api和會話。Asp.net web api會話

我已經創建了asp.net web api項目並集成了angularjs。每次我都會打電話給web api。

我已經閱讀了在Web API中使用會話不好的文章。我明白,web API是無狀態的方法。我同意。 stil有一種使用會話的方法。

第一個問題:如果在登錄後,我想在每個頁面上顯示用戶名,我應該如何處理web api方法?

第二個問題:他們說不要在webapi中使用會話。那麼安全地存儲客戶信息的另一種方式/方法是什麼?

如果我使用HTML5本地存儲,它可以編輯。 如果使用cookie,則可以將其刪除。

應用程序處於運行模式之前應該如何處理用戶?

回答

1

我建議你避免asp.session,因爲它可能會導致性能問題和can expire anytime regardless of your application state,does not scale on cloud, it will block concurrent ajax requests)。更好的方法是使用HTML 5存儲機制,特別是與AngularJs結合使用(可以使用ng-storage https://github.com/gsklee/ngStorage)。

+0

但是,如果我使用HTML 5的sessionStorage並在登錄後存儲用戶名。本地存儲是可編輯的,所以我不覺得安全。如果我更改用戶名,f12有什麼用途? – micronyks 2014-12-02 08:39:49

+1

@micronyks是的,你可以,但你也可以通過按F12以相同的方式編輯該頁面的html,但這種改變只會影響你的本地瀏覽器,並且不會被普通用戶執行。唯一需要注意的是安全信息(如密碼),它們不應該以未加密的狀態存儲在客戶端。 – 2014-12-02 08:45:50

0

我會建議你使用asp.net標識並在服務器上呈現用戶信息。

+0

你會告訴我一個方法嗎? – micronyks 2014-12-02 08:51:28

+0

我的想法是不在客戶端存儲用戶信息。您可以像訪問[this]一樣訪問用戶信息(http://stackoverflow.com/questions/263486/how-to-get-current-user-in-asp-net-mvc)。此外在大多數情況下,asp.net web api與asp.net mvc一起使用 – Mikalai 2014-12-02 09:02:42

+0

我不明白你的意思。我使用的是純粹的wab api而不是mvc控制器。我不知道如何繼續。 – micronyks 2014-12-02 09:07:28

2

這是語義學經常會引起討論的地方。人們將Session對象與無狀態混淆。並經常說:'不要使用會話,因爲它不是無狀態!'。

然而,他們真的意味着你應該努力讓你的平靜的呼喚是冪等的,這意味着他們不會改變他們的行爲,取決於你在背景中做什麼。

會話或運行時緩存或任何它用於緩存數據對您的無狀態設計沒有影響,因爲真的,下一步是什麼?你的數據庫也是有狀態的?你不應該讀取數據?廢話顯然;您的底層存儲(如果它在內存中或磁盤上)沒有反映您的狀態到客戶端。

儘管我覺得@MajoB提供了有關不使用會話對象的其他有效觀點,但在Web API,會話或其他內容中使用某種緩存確實沒有什麼壞處。但是,如果IN會話中的某些內容返回不同的結果,那麼請不要讓這個事實發生,否則當某個事件退出會話時。