none
C#客户端的程序读取HTTP服务器的SESSION ID,然后打开这个服务器的链接不用输入密码的方法。 RRS feed

  • 问题

  • 用C#编写的客户端程序,通过WebRequest等类获取到了一个HTTP服务器的SESSION ID,现在要求从这个C#程序里面打开HTTP服务器的链接都不用再输入密码

    我的构想是将获取到的SESSION ID设置到IE的cookie里面,我用代码:

    System.Type oType = System.Type.GetTypeFromProgID("InternetExplorer.Application");
    object o = System.Activator.CreateInstance(oType);
    oType.InvokeMember("Visible", System.Reflection.BindingFlags.SetProperty, null, o, new Object[] { true });
    oType.InvokeMember("Navigate", System.Reflection.BindingFlags.InvokeMethod, null, o, new Object[] { u });

    启动了IE浏览器,现在我希望设置其COOKIE,请问要用什么方法去设置呢?

    就是想实现类似JavaScript的效果:document.cookie="xxxxxxxx";


    da jia hao!


    • 已编辑 liubin 2013年5月5日 7:22
    2013年1月25日 2:23

全部回复

  • Hi liubin,

    你可以使用InternetSetCookie

    http://pinvoke.net/default.aspx/wininet.InternetSetCookie

    Bob Shen
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年1月28日 9:24
    版主
  • 我在C#里面调用InternetSetCookie,然后从C#启动的IE就有这个COOKIE了吗?感觉不太靠谱,如果可以请详细指教一下!

    da jia hao!

    2013年1月29日 3:54
  • 我在C#里面调用InternetSetCookie,然后从C#启动的IE就有这个COOKIE了吗?感觉不太靠谱,如果可以请详细指教一下!

    da jia hao!


    不行,不能这样做。
    2013年1月29日 3:55
  • 大家好,我最终研究出了解决方法,代码如下:

    System.Type oType = System.Type.GetTypeFromProgID("InternetExplorer.Application"); object o = System.Activator.CreateInstance(oType); oType.InvokeMember("Visible", System.Reflection.BindingFlags.SetProperty, null, o, new Object[] { true }); oType.InvokeMember("Navigate", System.Reflection.BindingFlags.InvokeMethod, null, o, new Object[] { "about:blank" }); Object doc = oType.InvokeMember("Document", System.Reflection.BindingFlags.GetProperty, null, o, null); Object state = oType.InvokeMember("readyState", System.Reflection.BindingFlags.GetProperty, null, doc, null); while (state.ToString() != "complete") Thread.Sleep(100); if (state.ToString() == "complete") { oType.InvokeMember("cookie", System.Reflection.BindingFlags.SetProperty, null, doc, new Object[] { "XXXXXXXXXXXXXXXXXXXXXXXX" }); oType.InvokeMember("Navigate", System.Reflection.BindingFlags.InvokeMethod, null, o, new Object[] { http://www.explame.com }); }

    经过测试,完全没有问题!但有一个缺陷,就是每次启动IE,都会启动一个新的IE窗口,而不是在已有的IE窗口上新加一个页签,这个有点遗憾,窗口开多了用户也投诉。。。

    所以还是想请教大家有无更好的方法?

    • 已编辑 liubin 2013年5月5日 7:17
    2013年5月5日 7:17
  • 你的这个方法只能够用于嵌入到C#程序里面的WebBrowser控件。如果是C#程序调用IE打开某个链接,则InternetSetCookie完全没有效果!


    da jia hao!

    2013年5月5日 7:24