分類
程式技術

網頁為什麼會發兩次request到自己

這個是相當困難的一個題目…..

話說在 debug 一個 asp.net project 時, 因為會用到 session 內的 counter 做一些事情, 結果在測試的時候發生了一個很奇妙的狀況, counter 會無故多 +1

仔細檢查 asp.net 的程式碼, session 內的 counter 一次只有加一, 是寫在 Page_Init 這個 event 裡. 理論上沒有理由會多 +1, 雖然是用 master page 的方式處理, 也沒有理由在這個狀況下發生問題. 於是進行獨立測試, 發現即使沒有使用 master page 也是一樣. 所以初步排除和 master page 有關.

接下來 check iis log來對照, 果然有發出兩次 request 的狀況, 而不是 asp.net code 內的問題, 這樣問題說明應該是在 client side 端, 所以乾脆用 client 端來查, (利用 firefox 的 firebug 發現還真的會對該頁面發出兩次 request. 真的太神奇了, 於是再將該頁面存成 html 來查, 再做一次測試, 整個還是一樣的結果, 於是只好拿出區塊區塊刪除的方式來查… 花了超久時間… 發現結論問題在一行:

<img src="" width="242" height="182" alt="" />

有沒有看到什麼狀況? 就是 src=”” 這件事, 他讓 client 去多訪問了沒有設定的 img src 也就是本頁, 又或是 src=# 也是一樣的結果啦!!

所以這個到底要怎麼說呢, 唉, 反正就是很悶的一個無敵怪 bug…. 還好有找到咧, 給大家做參考!!

繼續閱讀:
http://www.johnbatdorf.net/blog/CommentView,guid,5aebd6b0-9be3-462c-a920-e19998bc173e.aspx
http://blog.csdn.net/vividboy/archive/2007/09/13/1783162.aspx

為了增加一些 page view, 多上一個英文的描述, why page load twice in ASP.NET or why page fire twice page_init event (雖然和 asp.net 一點關係都沒有, 哈哈)

列舉asp中session的值

在 web 程式中, 有時會利用 session 來存放一些存在於 session 中的資料, 因為不想放 cookie 在 client 端, 而又非全域的 application 變數, 所以採用 session 將會是一個比較理想的方式.

利用 session 可以存放使用者在該次訪問的變數, 在 session timeout 時或是 session 中斷後, 該 session 即回自動消失. 他使用的基本技術是採用一個 client side 的 cookie 來做對應, 利用這組資訊可以對應出此 session 的變數出來.

接下來我們看如何將所有的在 session 變數內的值都取出來.

For Each key in Session.Contents
  Response.Write key & "=" & Session(key) & "<br>"
Next

利用 Session.Contents 將所有的內容配合 For Each 指令列舉出來, 如此一來便能將該 session 內的所有 key value pairs 找出, 並檢視是否有問題, 方便除錯上使用!

一般在程式寫作時, session 的值往往比較不好取得而不易 debug, 利用這種方式將能有效找出 session 問題值的關鍵.

參考資料:
http://www.w3schools.com/asp/asp_ref_session.asp