1、前提:我们通过分析和百度,我们了解到Cookie的存储路径为:C:\User\用户名\AppData\Roaming\Microsoft\Windows\Cookies 的路径下,存在多个 Txt 文件,不错这就是浏览网页的Cookie了,但这些cookie和浏览记录也将被映射到C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary Internet Files中。
2、那么我们怎么查看IE 缓存的具体路径呢,我们可以通过 IE浏览器 ,Internet 选项(基本-设置)查看,但是这我们只能查看缓存的存储路径,不不能看到Cookie的存储路径,此时我们需要进入注册表,进行查看,位置:HKEY_CURRENT_USER/SoftWare/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders 和 User Shell Folders 的COOKIE 和Caches 就是存储路径。
3、我们不管是通过手工修改注册表的方法还会使用程序修改,我们会发现一个问题,修改Caches时,重启IE立刻就生效了,但是修改Cookie路径,不会生效(且Cookie 不会保存了),但是你把Cookie路径改回之后,又好了,这是个奇怪的问题,后来发现,Cookie路径,需要重启系统才会生效,由此可见,cookie的路径并不是时时从注册表读取额,老铁们,就不要党务时间在这上边边了。当然:修改其他的比如:历史数据、收藏数据,是会立刻生效的。
4、那么,同胞们呢,我们为了做个项目可能会用到Cookie和Caches的存储,用作不是之需,比如:多个账号依次登录,我们就需要将cookie和Caches 还原,这样默认是直接登陆的。换一个思路:我们把Caches 和Cookie 保存起来,用的时候在还原过去,不行吗?答案:不行,原因是,Cookie和Caches 建立的有映射关系,如果你把映射关系破话,不打开新的页面的话是没问题的,如果打开新的页面,在进行覆盖的话,就会失效。
5、最终,给大家一个忠实的建立,就是缓存不要了,直接保存cookie不是通过文件保存,而是通过Win32 InternetSetCookieEx,将cookie写入,那么我们如何获取?cookie 以及有效期呢?我们知道了Cookie文件路径后,我们可以通过读取的cookie文件的方式进行。
6、Cookie 文件夹中有.data 文件我们不要,我们只需要读取txt文件内容就行了,Cookie 文件格式为:如图。各个元素之间中间通过 回车符 #10(/n)进行分割。*号作为duocookie的分割符号;第1行为 Cookie 名称第2行是 Cookie 的值第3行是 Cookie 所属站点的地址第4行是个标记值(注:准确来说应该是表示该Cookie是否被加密)第5行为超时时间的低位(Cardinal/DWORD)第6行为超时时间的高位第7行为创建时间的低位第8行为创建时间的高位其中获取Cookie不难,最主要的是 获取超时时间,和转化为 SetCookieExt 需要的时间格式,下边我们继续讲述:
7、Cookie 的创建时间我们不需要理会,主要是去5、6 中额超时低位,和高位。只需要将:高位左移32位的值+低位 就得到了正确的文件时间,然后转化。值得注意的是:有的网站可能存在时间区间差,请注意。
8、最后在调用SetCookieExt 时将时间传递过去就行了。具体未:C#代码 Datetime.ToString("r"); 设置参数:CookieValue 参数: cookiename=cookievalue;path="/";expires=有效期 注意:参数CookieName 要传Null 以及: 所有的Url必须带有:http:// 或者Https:// ,而cookie中的domain Url 是没有 Http额。