0

我想在外部浏览器中打开一个带有新会话和 URL cookie 的 URL。每次打开 URL 时,都应在带有新 cookie 的新浏览器中打开。我的问题是,每当我尝试在新浏览器中打开 URL 时,旧会话就会过期并且旧浏览器窗口不再有用。URL参数每次都会不同。我尝试使用 SWT 的内部浏览器和外部浏览器。试过Browser.setCookies(value,url); 还是不行。

对于外部浏览器:

public void openUrl(String url){
    IWebBrowser browser = PlatformUI.getWorkbench()
        .getBrowserSupport()
        .createBrowser(IWorkbenchBrowserSupport.AS_EXTERNAL, browserId, name, tooltip); 
    browser.openUrl(url);
} 

对于内部浏览器:

public void launchUrl(String url){ 
    Browser browser = (Browser) getBrowserShellNew().getData(BROWSER); // Browser is a static String "BROWSER" 
    browser.setUrl(url); 
}

private Shell getBrowserShellNew(){ 
    Display display=PlatformUI.getWorkbench().getDisplay(); 
    Shell shell = new Shell(display); 
    shell.setText("title"); 
    Rectangle screenBounds = null; 
    if (display.getMonitors().length > 1) { 
        screenBounds = display.getMonitors()[1].getBounds();
    } else { 
        screenBounds = display.getMonitors()[0].getBounds(); 
    } 
    shell.setBounds(screenBounds); 
    shell.setLayout(new FillLayout()); 
    shell.setMaximized(true); 
    Browser browser = new Browser(shell, SWT.NONE); 
    browser.setMenu(new Menu(browser)); 
    shell.setData(BROWSER, browser); 
    shell.open(); 
    shell.forceActive(); 
    shell.forceFocus(); 
    return shell;
}

原因必须是,所有浏览器实例都使用会话中的相同 cookie。需要以某种方式为每个 URL 启动创建一个带有 cookie 的新会话。使用外部浏览器。

4

2 回答 2

0

经过一番调查,我找到了通过在启动 URL 时将参数传递给 IE 来实现此目的的方法。正如我已经在答案的评论中提到的那样。以下是对我有用的解决方案。

Runtime.getRuntime().exec("C:\\Program Files\\internet explorer\\iexplore.exe -noframemerging \"http://helloworld.com\"");

注意:这仅适用于 IE 和 windows 操作系统。

于 2019-05-17T06:37:34.613 回答
0

我认为你有三个选择:

1)Browser.clearSessions()

2)OS.InternetSetOption(0, OS.INTERNET_OPTION_END_BROWSER_SE­SSION, 0, 0);

%AppData%\Roaming\Microsoft\Windows\Cookies3)如果您在Windows机器上或另一个操作系统中的相应文件夹上,请删除...

祝你好运...

于 2019-05-15T11:34:31.817 回答