首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将cookie从CookieContainer写入IE cookie存储区

将cookie从CookieContainer写入IE cookie存储区
EN

Stack Overflow用户
提问于 2010-09-08 21:51:45
回答 1查看 3.6K关注 0票数 3

我想从桌面应用程序导航到web应用程序中的页面。“没问题”,我听到你说,“只要用正确的URL启动默认浏览器就行了”。但是,web应用程序使用ASP.NET窗体身份验证,用户不想看到登录页面,因为他们已经在桌面应用程序中使用相同的凭据进行了身份验证。

这听起来很简单,我所要做的就是从桌面应用程序发出一个HTTP POST,从web应用程序的登录页面伪造回发。然后,web应用程序将设置其身份验证票证和会话状态cookie,并将它们返回给我,我会将它们存储在IE cookie存储中。然后,我可以导航到所需的页面,web应用程序会认为它已经通过了身份验证。

我有一些可以工作的代码来构造HTTP POST,发送它,并获得包含正确cookie的有效响应。但是,我不知道如何将它们写入IE cookie存储中。有谁能给我指个方向吗?

示例代码:

代码语言:javascript
运行
复制
var requestUrl = Properties.Settings.Default.WebsiteLoginPageUrl;

var requestEncoding = Encoding.GetEncoding(1252);

// Simulated login postdata
var requestText = string.Format(
    "__VIEWSTATE={2}&__EVENTTARGET={3}&__EVENTARGUMENT={4}&__EVENTVALIDATION={5}&userNameText={0}&passwordText={1}&submitButton=Log+In",
    HttpUtility.UrlEncode(Properties.Settings.Default.UserName),
    HttpUtility.UrlEncode(Properties.Settings.Default.Password),
    Properties.Settings.Default.FakeViewState,
    Properties.Settings.Default.FakeEventTarget,
    Properties.Settings.Default.FakeEventArgument,
    Properties.Settings.Default.FakeEventValidation);

var request = (HttpWebRequest) WebRequest.Create(requestUrl);
request.Method = "POST";
request.Accept = "*/*";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = requestEncoding.GetByteCount(requestText);
request.Headers.Add(HttpRequestHeader.CacheControl, "no-cache");
request.AllowAutoRedirect = false;
request.KeepAlive = false;
request.CookieContainer = new CookieContainer();

using(var writer = new StreamWriter(request.GetRequestStream(), requestEncoding)) {
    writer.Write(requestText);
}

var response = (HttpWebResponse) request.GetResponse();

// TODO: Grab the response cookies and save them to the interactive desktop user's cookie store.

Process.Start(new ProcessStartInfo {
    FileName = Properties.Settings.Default.WebsiteTargetPageUrl,
    UseShellExecute = true,
});
EN

Stack Overflow用户

回答已采纳

发布于 2010-09-08 23:45:47

您需要调用非托管InternetSetCookie()函数。你看!已经有人给你发wrote the interop了。不过,您应该验证它的正确性。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3668392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档