2014-12-23 33 views
1

好的,首先我想說我不知道​​我在做什麼。最後一個動作/網址搜索器ASP.NET MVC 5

我在我的MVC項目中有幾個頁面不斷從不同的頁面中擊中。例如,我的一個模型的編輯頁面可以來自詳細信息頁面或Crud索引頁面上的管理鏈接。一旦我們完成編輯,我想把用戶發回到正確的地方。考慮到我不明白身份returnUrl的東西,我寫了我自己的方法,創建兩個餅乾,最終我可能不需要兩個,但現在我有兩個,所以我可以監控他們在Chrome F12工具更新,並確保每個當我在Controller Action中使用這個方法時,它正在做正確的事情。我也想說我也沒有爲此做任何測試。我的測試是反覆試驗和Chrome F12。

下面是代碼:

private void LastActionHero() 
{ 
    string lastUrl = null; 
    var currentUrl = Request.Url.LocalPath; 

    if (Request.Cookies["currentUrl"] != null) 
    { 
     lastUrl = Request.Cookies["currentUrl"].Value; 
    } 

    if (lastUrl != currentUrl) 
    { 
     var current = new HttpCookie("currentUrl", currentUrl) 
         {Expires = DateTime.Now.AddDays(1)}; 
     Response.Cookies.Set(current); 
     var previous = new HttpCookie("lastUrl", lastUrl) 
         { Expires = DateTime.Now.AddDays(1) }; 
     Response.Cookies.Set(previous); 
    } 
} 

問題: 是否有這樣做的更好的辦法是這樣安全嗎?網站的一部分不在登錄後面。這很重要嗎?

你也有什麼想法,我應該如何實現這個?

我仍在研究如何使用它。

這裏是餅乾的截圖,他們似乎都使用方法是工作的罰款我就來回幾次當中3分或4的動作,在這裏它顯示了正確的最後2個網址:

enter image description here

回答

1

只要同一會話中的用戶每次只打開一個頁面,您的「cookie方法」就會起作用。如果用戶進入這樣的頁面,例如在一個標籤中,然後在從另一個標籤中離開另一個標籤之前,它將不再工作。

解決此問題的一個辦法是向該頁面提供「返回URL」。因此,您可以調用類似/Edit/1?returnUrl=CurrentUrl/Edit/1,然後使用編輯頁面上的該參數在編輯完成時返回到正確的頁面。

+0

我絕對看到你關於多個標籤問題的觀點。我會同意,這是我沒有想到的。你的想法很簡單,我喜歡這個! –

+0

我試圖複製多個選項卡問題,它似乎是跟蹤這些網址罰款。也許我誤解了你。 –

+0

@EricB:如果您在一個標籤中打開該頁面,然後在第二個標籤中打開該頁面(來自另一個位置),那麼這兩個標籤的Cookie將會更改(如果您在同一個會話中)。 – ChrFin