2016-03-15 101 views
1

我有一個使用ASP.NET身份的MVC網站。該網站可用於多個客戶數據,並且每個客戶都獨立於另一個客戶,不應共享數據。每次交易僅在選擇客戶時纔會發生在客戶數據上。MVC個人用戶帳戶登錄值持續

但是,登錄用戶可以看到所有客戶,他們只是在登錄時選擇要處理的客戶。

因此,登錄後,他們將從Dropdown中選擇他們的客戶,然後查看客戶可以爲該客戶完成的所有客戶項目,個人信息和獨特的事情。

因此,例如

var allItems = from a in db.Items where a.CustomerId = customerId select a; 

該客戶ID登錄時可得,爲什麼用戶從下拉選擇。但是,如何在整個用戶登錄會話中堅持這一選擇?我顯然不想將它保存到數據庫中,因爲它不是一個永久的選擇,我希望在註銷時選擇不再存在,讓他們可以自由選擇另一個客戶下次登錄。

另一個很酷的事情是能夠覆蓋get方法中的DbContext中檢索只有匹配的項目無論客戶ID選擇在登錄

public DbSet<Item> ItemsAll { get; set; } 

public IQueryable<Item> Items 
{ 
    get 
    { 
      return ItemsAll.Where(x => x.Customer == myLoggedInCustomerChoice); 
    } 
} 

回答

1

值添加到會話變量,對證當你加載頁面。

+0

請原諒我,如果我沒有看到會話變量之間的連接,以及客戶端如何跟蹤登錄,但會話變量有超時,那麼登錄也是如此。他們可以不一樣嗎?含義會話變量可能在用戶登錄之前失效。如果用戶單擊「記住我」 – MichaelMcCabe

+0

會話超時和登錄超時是不同的,但您可以通過在兩者上設置正確的設置來管理此事件。 (在這裏閱讀更多:http://stackoverflow.com/questions/17812994/forms-authentication-timeout-vs-sessionstate-timeout)。但這裏沒有魔法。要麼你必須「永久」地將選擇存儲在某個地方(即數據庫,cookie,本地存儲等),要麼必須考慮到客戶的選擇可能需要再次選擇。如果他們有一個「記住」的勾號,你仍然可以自動登錄他們,但他們必須選擇他們想看到的客戶。 – andreasnico

0

您的選擇是

  • 其保存到數據庫中。好,如果你真的不想用戶再次選擇。這樣做的缺點是,如果您還想在客戶端上捕獲它,則還需要使用其他選項之一將值保存在客戶端上。
  • 堅持它成爲一個cookie。不要設置過期或將其設置爲與記住我持續存在的身份驗證Cookie相同的過期時間。
  • 將其保存到HTML5本地存儲(window.localStorage)。這裏的缺點是您需要將任何請求中的變量包括在使用此信息的服務器中。其他選擇不需要。
  • 將其存儲在會話對象中並將會話配置爲使用數據庫。我不是Session對象的粉絲,所以我會用這個作爲最後的手段。
  • 隱藏字段(input type ='hidden') - 與本地存儲相同的缺點但是您必須確保此值在導航中不會丟失。所以對於SPA來說,這樣做很好,其中一些內容保持靜態,但對於傳統的Web應用程序來說並不方便。