關於防重複提交出現 頁面過期的問題

2022-04-11 14:50:35 字數 2597 閱讀 3780

在做包剪錘遊戲時,下注的時候提交乙個json 請求。不斷的重新整理後,點選下注,提示頁面過期。

經分析研究有如下疑問:

1.頁面已經產生了新的token, 點選下注按鈕 ,匹配session中的token,發現找不到了token的值,提示頁面已經過期,請重新整理。

2.右鍵重新整理之後,為何也沒有產生新的token 值。

3.測試發現在位址列直接回車或者crat + f5 強制重新整理,可以產生新的token。而右鍵重新整理不能產生新的token。位址列重新整理和f5 重新整理的區別?

當載入頁面時,會根據頁面的需要防重複提交的巨集定義生成token值,如果有5個需要防重複提交,便會產生五個token。伺服器將會把這五個token 放入session。使用者點選提交按鈕便會把當前的token與session的值匹對,如果在session中存在,說明是第一次提交,合法提交。這時頁面上將會產生新的token。

新增了 autocomplete="off"

檢視得知 此可以使當前的input屬性的快取失效,故每次請求都是新的value值。

如許,就能阻攔firefox的預設快取機制了。重新整理之後,這些input的值都初始化。

還有乙個寫法,可以把全個表單中所有input都設定為不快取的

有關解釋:

input 的屬性autocomplete 預設為on

其含義代表是否讓瀏覽器自動記錄之前輸入的值

很多時候,需要對客戶的資料進行保密,防止瀏覽器軟體或者惡意外掛程式獲取到

可以在input中加入autocomplete="off" 來關閉記錄

系統需要保密的情況下可以使用此引數

不少同學問,不都是重新整理嗎?還有什麼區別?其實,還是有的。

;q=0.8

accept-language zh-cn,zh;q=0.5

accept-encoding gzip, deflate

accept-charset gb2312,utf-8;q=0.7,*;q=0.7

connection keep-alive

http返回狀態顯示2

00 ok,但是,後台nginx伺服器的access.log並沒有找到該請求的記錄,說明請求並沒有真正提交到http伺服器。而是被瀏覽器發現快取中還有未過期的檔案,直接把請求攔截了,firebug裡面顯示所謂的「請求頭訊息」、「響應頭訊息」都是瀏覽器「偽造」的。這種重新整理,使用的網路流量是最小的,可以說完全沒有,時間消耗也是最少的。就像你找到一盒沒有過期的牛奶,覺得肯定沒有問題,誰都沒告訴就喝了。

二是請求的uri在瀏覽器快取中已過期,此時,firebug顯示的http請求訊息頭如下:

;q=0.8

accept-language zh-cn,zh;q=0.5

accept-encoding gzip, deflate

accept-charset gb2312,utf-8;q=0.7,*;q=0.7

connection keep-alive

if-modified-since mon, 04 jul 2011 10:12:40 gmt

多了一行if-modified-since,後台nginx伺服器的access.log也找到了該請求的記錄,說明瀏覽器對這種情況的處理方法是:再問一下伺服器,請求的uri在某個時間之後有沒有被修改過,而這個時間是由上次http響應的last-modified決定的。伺服器鑑定之後,沒有修改的話,返回304 not modified,瀏覽器收到後,從快取裡讀出內容;有修改的話,返回200 ok,並返回新的內容。這種情況,就像你找到一盒已經過期的牛奶,於是問別人,還能不能喝,如果別人說可以,你就把它喝了,如果別人說不行,那你得就另外找一盒新鮮的牛奶。

至於f5重新整理,其http請求訊息頭如下:

;q=0.8

accept-language zh-cn,zh;q=0.5

accept-encoding gzip, deflate

accept-charset gb2312,utf-8;q=0.7,*;q=0.7

connection keep-alive

if-modified-since mon, 04 jul 2011 10:12:40 gmt

cache-control max-age=0

又多了一行cache-control: max-age=0,意思是說,我不管瀏覽器快取中的檔案過期沒有,都去伺服器詢問一下,相當於上次http響應的expires暫時失效。伺服器的響應處理流程同上。這種情況,就像你找到一盒牛奶,沒有看它的有效期,直接就問別人能不能喝。

最後是ctrl+f5重新整理,其http請求訊息頭如下:

;q=0.8

accept-language zh-cn,zh;q=0.5

accept-encoding gzip, deflate

accept-charset gb2312,utf-8;q=0.7,*;q=0.7

connection keep-alive

pragma no-cache

cache-control no-cache

python django post提交出現403

為檢視函式新增修飾器 區域性禁用 匯入模組 from django.views.decorators.csrf import csrf exempt在函式前面新增修飾器 csrf exempt def index request if request.method get return render...

頁面按鈕防重複提交

防重複提交isallowclicksubmitbtn true,var isallowclicksubmitbtn that.data.isallowclicksubmitbtn 第一次進入 false 返回,不執行 第二次進入 ture 執行中斷 if isallowclicksubmitbtn ...

防重複提交方案

因為服務端是使用token來獲取使用者資訊,沒有對應的session管理機制,不能用sessionid加上使用者請求的url作為唯一標識。但是伺服器中的userid是用雪花演算法進行計算,能確保唯一性,所以我們選擇用userid加上使用者請求的url作為使用者請求的唯一標識。當使用者請求post p...