MozTW 討論區
https://forum.moztw.org/

Firefox 3 使用 eval() 會偷偷發 request 給 server!
https://forum.moztw.org/viewtopic.php?f=2&t=23643
1 頁 (共 1 頁)

發表人:  camuschou [ 2008-07-24, 21:50 ]
文章主題 :  Firefox 3 使用 eval() 會偷偷發 request 給 server!

小弟使用的版本是 Firefox 3.0.1,今天在 coding 時發現一個異常詭異卻又完全無解的怪事。

小弟使用的語言是 JSP + JavaScript,因需求必需在頁面生成時使用 JSP 隨機產生一個值,並把該值寫入 Session 並呈現在頁面上,而在頁面載入完成時又需要執行到JavaScript 的 eval(),於是怪事發生了,小弟發現頁面上的值一直無法符合 Session 中的值,後來查了一下 Server 的 log,發現 Firefox 3 竟然多傳了一次 request 給 Server,經過一步一步的追蹤發現原兇竟然是 eval()。

小弟發現當第一次執行 eval() 時,eval() 會發 requset 給 server,但是這個 request 返回的頁面卻又不顯示在 Firefox 上,而由於 JSP 在產生頁面時隨機生成一個值寫入 Session 中,如此造成了 Session 內的值和頁面上的值不相同的問題。

上面的描述有點亂,小弟用 step by step 的方法來描述:

1. 利用 Firefox 3 連結到 Test.jsp

2. Test.jsp 在生成時會亂數產生一個值 "abc",並將 "abc" 寫入 Session 與 呈現在畫面上。

3. 當 JSP 執行結束時,Session 中的值為 abc,且在頁面上也可以看到 abc 這個值。

4. 此時頁面開始執行 JavaScript,並執行到 eval()。

5. eval() 私底下發出一個 request 到 Server,要求再執行一次 Test.jsp。

6. Test.jsp 開始執行,並亂數產生一個值 "123",將 "123" 寫入 Session 與 呈現在畫面上。

7. 由於 eval() 發出的 request 所返回的畫面並不會呈現在 FireFox 上,因此目前頁面上所呈現的還是第 2 步完成時所生成的亂數 "abc"。

8. 此時頁面上的值為 "abc",但 Session 中的值已經變成 "123" 了。


上述的問題小弟在 IE、Firefox 2 上面測都不會有這樣的怪事,唯獨 Firefox 3 會如此,而更詭異的是如果畫面上同時有多個 eval() 存在時,只有第一個 eval() 會發 request,其他的都不會。小弟想過很多方法都無解,google 上也找不到類似的問題,不得已只得 po 上這裏請各位幫忙,還請知道解法的朋友能不吝指教。謝謝!

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/