2012-04-17 54 views
0

有沒有辦法在頁面加載後保存查詢字符串ID?我看的原因是...我應該來回頁面,更重要的是,如果用戶試圖manupluate ID,那麼它不應該影響我的網頁的結果,因爲我會讀取Ids不是從查詢字符串但從一些保存道具或類似的東西。保存QueryString以保護URL操作

爲例:讓說,在頁面加載第一次...我有這個網址:

http://www.somesite.com/Shop/Product/Detail.aspx?ProductId=100 

,如果用戶試圖修改querystirng並重新加載頁面,然後在Page_Load應不從querystring而是從保存的道具或東西讀取?

回答

0

這是行不通的,因爲它違背了互聯網的基本本質。 互聯網是無國界的。

每次用戶改變查詢字符串,它將被視爲一個新的Url,存儲參數將是沒有用的。 Page.IsPostback將不起作用,因爲每次Url更改都將成爲第一次。

話說,你仍然可以解決它,

  1. 隨着每一個網址,你可以通過一個唯一的標識符(如GUID)

  2. 只要頁面點擊,就可以在會話中保存參數並使用它們並使用Guid映射這兩個請求。

但問題仍然存在,如果用戶更改該Guid,則會再次將其視爲新請求。您可以前進一步,並開始保存該GUID以確保只處理系統生成的GUID,但總體上它只會使系統變得複雜。

我的猜測是,您可能正在爲您的問題尋找一個錯誤的解決方案。如果您可以分享您的實際目標,那麼我們可能會向您推薦更切實的東西。

1

在頁面加載事件中查看Page.IsPostBack屬性。第一次加載頁面時這是錯誤的。你應該驗證你的參數,然後將它們保存到會話或視圖狀態。

If Page.IsPostback = false Then 
    'Validate Request("ProductID") here 
    'Save in viewstate or session state 
Else 
    'Retrieve ProductID from viewstate or session state 
End If 

如果用戶更改查詢字符串,則應該將其視爲新的頁面加載。

0

您不能阻止用戶編輯查詢字符串值並嘗試查看其他頁面的內容或執行某些操作。你可以做的是你可以檢查頁面加載,這個用戶有足夠的權限來訪問這個頁面。

Ex : www.mysite.com/editproduct.aspx?productid=4 

editproduct.aspx,你必須檢查該產品4是否具有誰在訪問頁面的當前用戶訪問。(願他應該是創造者,他/她應該是在一個特定的Power Users組等。 。取決於你的情況)。如果他有權訪問,向用戶顯示編輯表單,否則將其隱藏並顯示一條消息,指出「您無權訪問此資源。」

+0

這是一個公開的網站。所以在這裏沒有用戶訪問。 – 2012-04-17 12:22:15

0

有沒有辦法;但是,您可以使用會話來驗證何時調用Page_load。

If (Page.isPostBack = true) { 
    Session("SAVE") = false; 
} 

在Request.Querystring語句之前的一段時間,您驗證'保存'會話狀態。