我正在創建一個基於嚮導的用於輸入用戶輸入的一系列表單。該向導的一個要求是腳本(PHP)不能將輸入保存到數據庫(MySQL)中,直到用戶單擊「保存」按鈕,因此我必須設置一種機制將用戶輸入以一種形式傳輸到另一種形式當用戶點擊「上一個」或「下一個」按鈕時。我研究了使用各種方法,包括cookies,會話,臨時文件等,但我決定將base64_encoded序列化數據嵌入到系列中所有表單中存在的隱藏字段中。此字段中的值將在表單提交中解碼,並在插入當前表單中的其他值後插入下一個表單時進行重新編碼。在表單提交之間傳遞base64_encoded序列化數據
這裏的隱藏字段的外觀示例:
<input type="hidden" name="wizard:presave" value="YTo2OntzOjU6InRpdGxlIjtzOjEwOiJRdWVzdGlvbiAyIjtzOjQ6InRleHQiO3M6MTk6IlllcyBpdCdzIGEgcXVlc3Rpb24iO3M6NDoidHlwZSI7czo2OiJjaG9pY2UiO3M6NzoiY2hvaWNlcyI7YTowOnt9czo1OiJwb2ludCI7aToxO3M6Mjoib3AiO3M6MTM6ImVkaXRfZXhlcmNpc2UiO30=" />
所以問題是:
是它認爲是一個好/壞的做法?
HTMLform中隱藏字段是否有長度限制?
有什麼可能的安全問題?
有沒有更好的選擇? (與解釋,最好不使用JavaScript)
在此先感謝!
我重新考慮了使用會話和它的工作原理,但我仍然需要設置一個隨機的'實例ID'以在提交之間傳遞,以便用戶可以在相同會話上運行多個嚮導實例而不會互相干擾。但它會引入其他安全問題,如用戶混淆實例ID等? – Lukman 2009-12-16 08:24:57
我不這麼認爲。只要您將正確的隨機值存儲在會話中,那麼唯一可用於操作的參數就是會話令牌本身。 – zombat 2009-12-16 18:21:55
實施,它的工作很好。這裏的所有答案都很好,但是這個提供了最好的解釋。謝謝。 – Lukman 2009-12-17 03:50:51