从SWT浏览器中销毁Cookie

时间:2016-04-02 00:45:31

标签: java swt

我在SWT Browser课程的Cookie管理方面遇到了麻烦。浏览器创建的cookie似乎在会话之间保持不变,但很难跟踪和删除。

特别是,我想删除在Stack Exchange身份验证过程中创建的特定cookie。

现在,我可以打印出现有的Cookie数据,但无法使用Browser.setCookie方法找出如何编辑或(理想情况下)删除Cookie。

此处是我的代码:

// Check the 'acct' cookie
System.out.println("Check Cookie: " + Browser.getCookie("acct", "http://www.stackexchange.com"));
//  Outputs "Check Cookie: t=X123X&s=X123X" [redacted id's] 

// Try to reset the cookie
Browser.setCookie("acct=; expires=Thu, 01-Jan-1970 00:00:01 GMT", "http://www.stackexchange.com");

// Read the cookie back again
System.out.println("Updated Cookie: " + Browser.getCookie("acct", "http://www.stackexchange.com"));
//  Outputs "Updated Cookie: t=X123X&s=X123X" [same data as before] 

由于没有明确的方法来查看SWT浏览器存储的cookie,或清除存储的所有cookie,我对如何重置这些值感到有些困惑。到目前为止,我已经尝试了setCookie()个参数的一些变体,但没有成功。

提前感谢您提出任何建议或帮助。

1 个答案:

答案 0 :(得分:1)

JavaDoc of Browser#setCookie()非常明确:

  

在网址上设置Cookie。请注意,cookie在所有Browser实例之间共享。 value参数必须是符合RFC 2109的cookie头字符串。该值将不变地传递给本机浏览器。

     

示例值字符串:foo = bar(基本会话cookie )foo = bar;路径= /; domain = .eclipse.org(会话cookie )foo = bar; expires = Thu,01-Jan-2030 00:00:01 GMT(持久性cookie )foo =; expires = Thu,01-Jan-1970 00:00:01 GMT(删除cookie foo)

下面的代码创建一个cookie,然后打印它,删除它并再次打印。

输出:

  

Cookie foo:bar

     

Cookie foo:null

public static void main(String[] args)
{
    Display display = new Display();

    Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout());

    Browser browser = new Browser(shell, SWT.NONE);

    String url = "http://localhost:8080/";

    /* Set the cookie */
    Browser.setCookie("foo=bar", url);

    System.out.println("Cookie foo: " + Browser.getCookie("foo", url));

    /* Delete the cookie by setting to expired date */
    Browser.setCookie("foo=; expires=Thu, 01-Jan-1970 00:00:01 GMT", url);

    System.out.println("Cookie foo: " + Browser.getCookie("foo", url));

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }

    display.dispose();
}