亚洲AV无码乱码在线观看不卡|最新大伊香蕉精品视频在线|亚洲不卡av一区二区|国产美女无遮挡免费

登錄論壇 | 注冊會員 設為首頁 | 收藏本站
當前位置 : 首頁>軟件學院>程序開發(fā)>ASP.NET>正文
 
用程序登錄Aps.Net頁面

http://www.yibo1263.com 2008-6-29 21:22:55  來源:本站  編輯:張賀兵
 
  在寫Internet應用程序的時候,常常需要處理用戶登錄的情況。一般來說,對于這種情況,我們是使用程序來模擬用戶在Web頁面上填寫用戶名、密碼并提交的過程。當用戶在Web頁面上輸入了用戶名、密碼并提交之后,實際上是觸發(fā)了一個POST請求,在這個請求中包含有用戶名、密碼等信息。因此,我們只要在程序中將相關信息封裝成一條POST請求,并將它發(fā)送給Web Server,基本上就能實現登錄了。以MFC為例,下面的這段代碼模擬了一個登錄過程:

  CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");

  // name = "sam", password = "123", action = "submit"

  CString strFormData = _T("name=samamp;password=123amp;action=submit");

  CInternetSession session;

  CHttpConnection* pConnection =

  session.GetHttpConnection(_T("ServerNameHere"));

  CHttpFile* pFile =

  pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,

  _T("FormActionHere"));

  BOOL result = pFile->SendRequest(strHeaders,

  (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());

  這個方法對于Asp頁面很有效,但對于Asp.Net頁面,有時卻不起作用,這是為什么呢?

  為了搞清出Asp.Net頁面在處理登錄時與Asp頁面有何區(qū)別,我們需要使用Sniffer工具來跟蹤Web服務器與瀏覽器之間的通訊。經過跟蹤會發(fā)現,Asp.Net頁面在用戶提交登錄信息之后,仍然是使用POST請求將相關信息發(fā)送給服務器。所不同的是,處理用戶名、密碼等信息之外還多了一個__VIEWSTATE。如果在上面代碼中的strFormData中加上一個通過Sniffer得到的__VIEWSTATE的話,就能夠成功模擬出整個登錄過程了。接下來的問題就是,我們應該如何獲得這個__VIEWSTATE呢?

  我們知道,Asp.Net頁面有一個ViewState屬性,Asp.Net用它來保存頁面的狀態(tài)信息,以便在頁面提交失敗時,能夠恢復頁面的狀態(tài)。它是通過頁面中的一個隱藏的域來定義的,如果通過瀏覽器來View Source的話,可以看到它是如下的一行代碼:

  

  它的value值正是我們所需要的,我們只要從登錄頁面中解析出這個__VIEWSTATE的value,我們的問題就能夠得到解決了。

  仔細看一下,ViewState的值是經過編碼的,先不管它,直接將它從頁面中取出,和登錄信息一起組成POST請求,發(fā)送給Server,結果如何呢?失敗了L。對比一下Sniffer的結果和頁面中ViewState的value,我們會發(fā)現,它們之間還是有些許不同的。原來,頁面源碼中的ViewState值是經過Base64編碼的,而當它被發(fā)送給Web Server時,為了保證傳輸的正確,瀏覽器會將它轉換成URL編碼,當Web Server接收到ViewState之后,當然會先將它從URL編碼解碼為Base64編碼再交給Asp.Net處理?磥砦覀冃枰獙iewState的值在進行一邊URL編碼處理,這樣就能夠成功模擬整個登錄過程了J。

  參考

  1. HOWTO: Simulate a Form POST Request Using WinInet,微軟的KB文章,描述了模擬POST請求的實現。

  2. ASP .NET Maintaining the ViewState,ViewState的入門知識。

  3. ViewState: All You Wanted to Know,關于ViewState的深入討論。

  4. ViewState Parser,想看看解碼后的ViewState是什么樣子嗎?試試這個Parser。

  5. 博客堂中的相關討論,這是我在解決這個問題的過程中,在博客堂寫的Blog。
 
收藏】【打印】【進入論壇
  相關文章:

 
 
 
 
最新文章

中關村艷照門女主角詳記錄高清組圖 
大連護士門大尺度艷照高清組圖
iPhone女孩微博爆紅 最寶貴東西換iPhon
反恐精英之父內維爾:改變電腦游戲銷售
團購網站黎明之前:中國市場慘烈廝殺不
團購鼻祖Groupon中國揭秘:快與慢的商業(yè)
Spil Games發(fā)布新的品牌形象
1800配置一臺主機 不要顯示器
聯想V360筆記本模特寫真
愛國者第四代移動硬盤將面市、低電壓保

 
推薦文章
1
2
3
4
5
6
7
8
9
10
iPhone女孩微博爆紅 最寶貴東西換
大連護士門大尺度艷照高清組圖
中關村艷照門女主角詳記錄高清組
蘋果員工中毒門
宮如敏不雅照瘋傳 看張馨予韓一菲
深耕市場 永續(xù)經營——專訪百腦匯
優(yōu)派專業(yè)電子書 讓您回家旅途多姿
揭曉百萬大獎三星bada魅力綻放中
大明龍權“江湖英雄會”全國PK大
永恒之塔校園達人挑戰(zhàn)賽完美落幕
八卦圖解 More>>
iPhone女孩微博爆紅 最寶貴東西換 大連護士門大尺度艷照高清組圖
中關村艷照門女主角詳記錄高清組 宮如敏不雅照瘋傳 看張馨予韓一菲
和硕县| 宁夏| 苏尼特右旗| 龙里县| 庐江县| 万年县| 溧阳市| 普兰店市| 紫阳县| 沙河市| 夏津县| 高尔夫| 海林市| 墨竹工卡县| 长宁区| 濉溪县| 武冈市| 绿春县| 岳阳县| 睢宁县| 桐梓县| 梁河县| 汉中市| 铁力市| 那坡县| 金川县| 房山区| 秦皇岛市| 邵阳县| 枞阳县| 静宁县| 锦州市| 辉南县| 大连市| 金秀| 邳州市| 延长县| 福贡县| 台东县| 宁晋县| 太白县|