首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

大家新年好! 小弟使用winsock编写WEB浏览器,有些有关问题不明白特来请问

2012-01-06 
大家新年好! 小弟使用winsock编写WEB浏览器,有些问题不明白特来请教小弟新血来潮想研究一下流览器,啊啊想

大家新年好! 小弟使用winsock编写WEB浏览器,有些问题不明白特来请教
小弟新血来潮想研究一下流览器,啊啊     想用winsock自己编写一个   有些问题弄不明白特来请教

1   网站登陆后   会有session记录用户的登陆信息。我们知道session是相对浏览器来确认用户身份的,
也就是说:  
A   我启动两个ie   使用相同的用户名登陆同一个网站   他们的session是不一样的(当然可能记录的内容是一样的   阿阿).
B     我启动一个ie   登陆网站,我在IE中   点击一个链接   弹出一个新的IE窗口,新弹出的ie跟原来的IE   他们的session是同一个session

http协议是这样的:
用户请求   ->   服务器响应   -> 关闭请求链接

所以我想知道   www服务器是怎样实现session机制的?   他是通过什么手段来标示浏览器的   ?
我用winsock来模拟浏览器我需要向www服务器发送什么样的请求才能让   session认识我呢

2   我们在访问网站的时候产生cookies.   session   和   cookies   有什么联系吗?
    我怎样设置和读取cookies呢   ?
    如果我在同一个一台计算机上使用   N   个用户名   登陆同一个网站,请问这些cookies该怎么管理呢?

那位高人了解这方面的情况   望指教   thanks


另   那位大哥有这方面的资料   小弟急需

啊啊   祝大家新年快乐  



[解决办法]
使用winsock编写WEB浏览器? HTTP等协议你了解多少?
[解决办法]
似乎FireFox是开源的……
[解决办法]
你应该做的似乎不是浏览器,而是下载工具
[解决办法]
HTTP是无状态的协议,Session的实现并不是依赖于HTTP协议的
Session的实现有基于客户端浏览器的,如Cooike,也有基于服务端的,如使用SessionID

[解决办法]
比如在表单里放些隐藏控件,存储一些服务器才知道怎么解析的数字字母,不就可以区别对待各个用户了
[解决办法]
Cookie 之类的是加在 http 的头里的。

比如:我抓了个包

GET /delphibbs/dispq.asp?lid=3651865 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; Embedded Web Browser from: http://bsalsa.com/; .NET CLR 2.0.50727)
Host: www.delphibbs.com
Connection: Keep-Alive
Cookie: skin=1; UserCode=7D5C8062E81194AE0E740696%2E08; ASPSESSIONIDAQQCCDTA=ABBOPNDCFHDMJJPMIIGEOBMB

// 最后这行就是 Cookie 的内容
但 Session 我想也是在这里发的一个ID, 但我还没试过
[解决办法]
再发一个

GET /Expert/xsl/Reply_Xml.asp?Topicid=5268586 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://community.csdn.net/Expert/TopicView1.asp?id=5268586
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; Embedded Web Browser from: http://bsalsa.com/; .NET CLR 2.0.50727)
Host: community.csdn.net
Connection: Keep-Alive
Cookie: CurrSelectExpertList=CE_List_WeekExpert; ASPSESSIONIDSCDCBRQC=OFGGNICCPFMJBPFJBDMEGMNN; UserName=fox1999; uid_www=3e86c63bc6246ff9c3157145c5682e45; cnt_uid_www=03c94e263750b50fec69f1b2a5adc853; activeUserName=fox1999; ABCDEF=SHNMXMgcCpH3tEu2Y2Dxi5M%252b%252b0mWaJtAmzbXK%252fi9Fp2L6yscjTy9pfylO9MkwKu%252f9WbCf%252b1Gq234W8%252b%252fXigmxqtccY891WvhzLyA6FG5bntbuq0pCEdYZvbY6Yc%252bFJW8wayGVvVI6oo%253d; QWERTOP=3636


这个是读CSDN 论坛时的包,没看到发 session,
我不知道是不是因为 csdn 论坛没有用 session ,是用 cookie 的。

最好的方法还是看 RFC
[解决办法]
打开一个浏览器,使用用户名1登陆一个网站,然后ctr+n(这一点很重要)再打开一个浏览器,使用用户名2登陆一次

这种情况下,对于web server,这两个登陆的sessionid相同,对于web server来说,session也是一个。即使更多的,都被web server 视为一个session ,假设后来登陆的用户名,业务逻辑中有给session ( "变量名 ")附值,其他的登陆用户名也可以取到或者覆盖这个变量



至于用户名区分管理,那就是你的B/S系统的事情,与web server关系不大了

你打开一个浏览器登陆网站,然后继续从这个窗口打开其他窗口,request header和data中包含了session所需的信息,web server基于此来判断

如果从新打开一个浏览器,第一次访问这个站点,request header 和data中就是一个初始化的请求,web server基于此来创建一个新的sessionid
[解决办法]
response header 和data 部分,browser是从这里取得保存到cookie里的数据

你抓包看吧,最简单的就是把缓存和cookie清空,用浏览器访问baidu,你可以看到baidu 的server给你返回的header,然后再次访问baidu,你会发现header中的set-cookie,被request过去了,baidu的server是从这个来判断是否重复访问的

至于session跟浏览器关系不大

热点排行