在A进程的WebBrowser中登录淘宝,然后在B进程的WebBrowser中打开淘宝首页,发现并没有登录。
为什么呢?因为保存着登录状态的Cookie是会话级Cookie,不是持久化Cookie。
会话级Cookie与持久化Cookie的不同之处在于:
前者存在内存中,后者存在硬盘文件上。
前者只在当前进程中有效,后者在所有进程中有效。
前者没有规定有效时间,它在进程生命周期内有效,后者规定了明确的有效时间。
那么,我们要做的就是把会话级Cookie变成持久化Cookie,这样在B进程的WebBrowser中打开淘宝首页,这个保存着登录状态的Cookie由于已经被我们转变成了持久化Cookie,在B进程中也有效,会被WebBrowser自动发往淘宝WEB服务器,自然,淘宝服务器也会返回已经登录的状态。
但是这样做的话,是不太安全的,因为这样做以后,即便是浏览器关闭甚至重启电脑,换别人使用这台电脑时,别人打开淘宝首页,也是已经登录的状态。如果不用考虑这种安全问题的话,还是可以这样做的。
把会话级Cookie变成持久化Cookie怎么变?
答案就是使用Wininet提供的API:
InternetGetCookie
InternetSetCookie
InternetGetCookieEx
InternetSetCookieEx
在A进程中登录淘宝后,把和登录状态相关的Cookie甚至直接把全部Cookie用InternetGetCookie取出来,然后用InternetSetCookie设置为持久化的Cookie。
具体方法可以参考这篇文章:
http://blog.csdn.net/charlessimonyi/article/details/17413295使用的时候要细心细心再细心,除了细心之外,还要再细心,不然总是会得到莫名其妙的无效结果。
这是我折腾了好几天得出的结论,差一点就觉得这几个API无效而放弃了。
一定要结合浏览器HTTP抓包工具一点一点分析,仔细观看HTTP相应头里的Set-Cookie:
另外结合Chrome或Firefox浏览器仔细查看它的每一个Cookie
注意每一个Cookie的PATH、DOMAIN、expires属性,一定要设置对,不然是无效的。
我已经实验过在一些简单的网站上是有效的,确实可以将会话级Cookie变成持久化Cookie而达到你想要的那种效果。那些网站都很简单,用户登录后才有两三个Cookie,其中只有一个保存着登录状态的Cookie,只需对这个Cookie进行这种操作就能实现目的。
但是。
要注意的是,淘宝网的Cookie相当多,相当复杂,有的Cookie还会随着对它页面的访问、随着时间的变化而变化。并且还有一些问题,比如:用IE打开淘宝并登陆,然后便不进行操作了,也不关闭IE页面,长时间过去以后,再点击淘宝上连接,发现登陆状态还是已经退出了。淘宝服务器发现一个客户的Cookie长时间没有再访问页面,也会令该Cookie失效。等等。
不过只要花大量时间仔细分析淘宝的每一个Cookie,慢慢调试、测试你的程序,还是能实现你的目的的。