2011-05-31 67 views
4

我正在使用ASP.Net提供一個頁面。我在頁面上使用jQuery動態添加的控件的添加/編輯/刪除功能,其中一些在數據庫中具有相關記錄。哪裏是放置這些id(主鍵)的最佳位置,屬性data- *,jQuery.data()?我應該擔心Id是否可見客戶端?將數據庫ID放在客戶端的最佳位置在哪裏?

+0

這是什麼平臺? php,asp.net等? – 2011-05-31 15:29:15

+0

我使用ASP.Net和jQuery – Homer 2011-05-31 16:18:48

回答

1

你可以自己的屬性添加到一個元素(例如my-attr="92"),你可以使用一個隱藏的輸入字段設置爲ID(<input type="hidden" value="92" />)的值,或者您也可以只使用id屬性(例如id="db-92")。

我不認爲這真的很重要,你使用哪種方法,無論最適合。

+0

我始終創建自己的屬性,並認爲這是一個很好的方式!除了當然,它不會驗證:) – 2011-05-31 15:32:51

+2

更好地遵循標準並使用'data'屬性:http://ejohn.org/blog/html-5-data-attributes/(通過jQuery.data API)。 – 2011-05-31 15:37:08

+0

@Martijn:但那些不支持HTML5的瀏覽器呢? – 2011-05-31 16:01:48

1

你應該決不將這個客戶端上。既然你將不可避免地通過你的服務器返回到最多的數據,你應該把某種形式的關鍵字(比如dsource ='db3'作爲一個屬性或者隱藏的領域..),然後做一些查找在服務器進程中。

+0

爲什麼不準確?我不明白爲什麼在HTML中放入這麼糟糕,如果您正在驗證對象的所有權,這不完全是安全風險。 – freshnode 2011-05-31 15:53:07

+0

我沒有看到所有權_的哪個_verification被設置爲OP的條件。即使這樣,這些信息也應該被分割。用戶(在瀏覽器上)不需要知道這些信息。 (即使它在加價模糊,恕我直言,它仍然是一個安全風險) – 2011-05-31 16:01:32

+0

@Homer,我看到你已經編輯了我的原始答案以來的問題。鑑於您使用的是asp.net,我的回答尤其正確。您在服務器上使用_page方法,_callbacks或web services_的天氣不會通過將db id發送到客戶端來獲得,它應該可以在服務器上輕鬆訪問。如果你發現你必須發送一些東西給客戶,那麼把它作爲某種類型的關鍵,而不是實際的ID。 – 2011-05-31 17:44:13

1

首先做使用直接數據庫ID。您將被直接綁定到一個表的主鍵的一個版本。相反,創建第二個欄,使用UUID是主鍵

佔位例如

tbl_person 
person_id INT PRIMARY KEY 
person_uuid VARCHAR(64) 
name VARCHAR(128) 

但是,爲了回答實際的問題,我建議你使用適當的元素的屬性,proabbly ID

<tr><td id="1234-5678">Paul </td></tr> 

(編輯得到正確的代碼格式)

+0

我認爲一個網頁事務是短暫的,並且期望記錄的主鍵在動作之間不會改變是一個有效的方法。雖然UUID方法在某些情況下是有效的,但我認爲保持簡單直到需求更好。 – Matt 2011-05-31 15:38:28

+1

+1根據來自瀏覽器的ID發回數據也是一種安全風險。如果服務器沒有使用會話機制來限制其他用戶數據,則可以使用一些螢火蟲來訪問其他人的數據。 – naugtur 2011-07-01 22:13:01

1

我總是使用jQuery的元數據庫,它本質上是$()。類(或任何其他)所述對象的屬性中包含的數據()功能。

找到了jQuery插件的元數據here:「這個插件能夠從類,隨機屬性,子元素和HTML5數據 - *屬性提取元數據的。」

所以你可以做這樣的東西:

<tr><td>Dave Jones</td><td><input class="delete_person {person_id: 90}" type="button" value="Delete this guy" /></tr> 

然後使用jQuery:

$('.delete_person.').click(function() { 
    // delete person 
    $.post('/controller/delete_person', {person_id: $(this).metadata().person_id}, 
    function() { 
    // the person was deleted 
    } 
}); 

希望幫助!

+0

爲什麼不使用jQuery native .data API? – 2011-05-31 16:26:47

6

加密客戶端記錄的ID以確保數據庫的安全性是一種很好的做法。通常一個隱藏的領域將做的伎倆。

通過這種方式,用戶僅通過查看源見加密ID。被調用的腳本然後使用用於加密的密鑰來檢索記錄標識符服務器端並根據需要操縱數據。

相關問題