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

登錄論壇 | 注冊(cè)會(huì)員 設(shè)為首頁(yè) | 收藏本站
當(dāng)前位置 : 首頁(yè)>軟件學(xué)院>程序開(kāi)發(fā)>ASP.NET>正文
 
用程序登錄Aps.Net頁(yè)面

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

  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());

  這個(gè)方法對(duì)于Asp頁(yè)面很有效,但對(duì)于Asp.Net頁(yè)面,有時(shí)卻不起作用,這是為什么呢?

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

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

  

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

  仔細(xì)看一下,ViewState的值是經(jīng)過(guò)編碼的,先不管它,直接將它從頁(yè)面中取出,和登錄信息一起組成POST請(qǐng)求,發(fā)送給Server,結(jié)果如何呢?失敗了L。對(duì)比一下Sniffer的結(jié)果和頁(yè)面中ViewState的value,我們會(huì)發(fā)現(xiàn),它們之間還是有些許不同的。原來(lái),頁(yè)面源碼中的ViewState值是經(jīng)過(guò)Base64編碼的,而當(dāng)它被發(fā)送給Web Server時(shí),為了保證傳輸?shù)恼_,瀏覽器會(huì)將它轉(zhuǎn)換成URL編碼,當(dāng)Web Server接收到ViewState之后,當(dāng)然會(huì)先將它從URL編碼解碼為Base64編碼再交給Asp.Net處理?磥(lái)我們需要將ViewState的值在進(jìn)行一邊URL編碼處理,這樣就能夠成功模擬整個(gè)登錄過(guò)程了J。

  參考

  1. HOWTO: Simulate a Form POST Request Using WinInet,微軟的KB文章,描述了模擬POST請(qǐng)求的實(shí)現(xiàn)。

  2. ASP .NET Maintaining the ViewState,ViewState的入門知識(shí)。

  3. ViewState: All You Wanted to Know,關(guān)于ViewState的深入討論。

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

  5. 博客堂中的相關(guān)討論,這是我在解決這個(gè)問(wèn)題的過(guò)程中,在博客堂寫的Blog。
 
收藏】【打印】【進(jìn)入論壇
  相關(guān)文章:

 
 
 
 
最新文章

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

 
推薦文章
1
2
3
4
5
6
7
8
9
10
iPhone女孩微博爆紅 最寶貴東西換
大連護(hù)士門大尺度艷照高清組圖
中關(guān)村艷照門女主角詳記錄高清組
蘋果員工中毒門
宮如敏不雅照瘋傳 看張馨予韓一菲
深耕市場(chǎng) 永續(xù)經(jīng)營(yíng)——專訪百腦匯
優(yōu)派專業(yè)電子書 讓您回家旅途多姿
揭曉百萬(wàn)大獎(jiǎng)三星bada魅力綻放中
大明龍權(quán)“江湖英雄會(huì)”全國(guó)PK大
永恒之塔校園達(dá)人挑戰(zhàn)賽完美落幕
八卦圖解 More>>
iPhone女孩微博爆紅 最寶貴東西換 大連護(hù)士門大尺度艷照高清組圖
中關(guān)村艷照門女主角詳記錄高清組 宮如敏不雅照瘋傳 看張馨予韓一菲
云龙县| 新昌县| 桦川县| 绵竹市| 三门县| 尚义县| 江北区| 边坝县| 潜山县| 赣榆县| 双桥区| 灌南县| 班戈县| 沭阳县| 乐昌市| 宁化县| 吴忠市| 津市市| 绍兴县| 安平县| 华蓥市| 万盛区| 前郭尔| 绥中县| 洪雅县| 南宁市| 淮南市| 扎兰屯市| 怀仁县| 凤山市| 隆昌县| 桐乡市| 康马县| 溆浦县| 炉霍县| 繁昌县| 呼玛县| 沙雅县| 乌审旗| 班戈县| 五原县|