http://topic.csdn.net/u/20080926/14/a17dd5c7-c521-4556-8384-a9022a5dfbb0.html?2130116898
这是上一篇帖子,讨论继承自CHTMLVIEW的浏览器程序(下称“自制浏览器”)在点击超链接打开新窗口时会丢失cookie.在此基础上,我有进行了一些测试,使用sniffx来抓取浏览器的请求,发现了如下的问题:
同样打开一个新窗口 window.open("/web/test/testUpdateAction.do","UpdatePage","width=600,height=320");
IE的处理方式为直接请求URL:127.0.0.1:7001/web/test/testUpdateAction.do
自制浏览器的处理方式为
1、请求URL:127.0.0.1:7001/web
2、请求URL:127.0.0.1:7001/web/
3、请求URL:127.0.0.1:7001/web/test/testUpdateAction.do
第一步发送的cookie为比父页面的cookie少了一些信息,我猜想少的这些信息正式在web/路径下设置的。
第二步发送的cookie和父页面的相同。
第三步发送的cookie却又和第一步相同。
结果服务器那边看到第三步的时候,发现和父页面的cookie不同,服务器维持的session自然失效。请问如何避免自制浏览器分步去访问服务器,而像IE一样一步到位?

解决方案 »

  1.   

    在新的窗口里面捕获BeforeNavigate看看到底请求了几次。
    你在新的窗口里面调用了GoHome()?
      

  2.   

    您一句话点醒梦中人!
    void CBrowserView::OnInitialUpdate()
    {
    CHtmlView::OnInitialUpdate();
    Navigate2(_T("http://10.10.100.1:7001/web"),NULL,NULL);
    }
    这是我的OnInitialUpdate函数!
    每次新开窗口的时候都会去调用它,不出错才怪!
    定义了一个全局变量,然后判断是第一次打开的时候才去调用Navigate2。
    问题解决了!