【问题标题】:iOS UIwebView Auth CookiesiOS UIwebView 身份验证 Cookie
【发布时间】:2012-02-14 07:41:01
【问题描述】:

我有一个UIWebView,它加载了一个用户身份验证的网站。该站点创建一个身份验证 cookie。在浏览器中,除非您清除 cookie,否则您将始终处于登录状态。当 xCODE 加载时,它可以在查看 cookie jar 时看到列出的 cookie,但它不会发送到 webView。 我想知道如何让 webView 知道 auth cookie 在那里,这样它就不会每次都继续提示用户进行身份验证。

【问题讨论】:

    标签: iphone ios ipad webview objective-c++


    【解决方案1】:

    您可以使用 NSURLConnection 类执行 HTTP 请求以登录网站,并检索 cookie。要执行请求,只需创建一个 NSURLConnection 实例并为其分配一个委托对象。

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
    

    然后,实现一个委托方法。

    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;
        NSDictionary *fields = [HTTPResponse allHeaderFields];
        NSString *cookie = [fields valueForKey:"Set-Cookie"]; // It is your cookie
    }
    

    保留或复制 cookie 字符串。当您想要执行另一个请求时,请将其添加到您的 NSURLRequest 实例的 HTTP 标头中。

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];
    [request addValue:cookie forHTTPHeaderField:"Cookie"];
    

    可以随时调用此方法删除 Cookie:

    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (NSHTTPCookie *each in [[[cookieStorage cookiesForURL:YOUR_URL] copy] autorelease]) {
            [cookieStorage deleteCookie:each];
        }
    

    【讨论】:

    • 好的,我是 xCODE 的新手,对此我有疑问。如果它们太简单,请随意称呼我的名字。在 AppDelegate.m 文件中,我尝试声明 NSURL 和 NSURLConnection 并得到关于那些非正常常量的编译器错误。我也在 AppDelagate.m 中实现了委托并编译。 NSMutable 我不知道应该采用什么方法。我敢肯定这是一些简单的问题,但我真的不知道。
    【解决方案2】:

    您可以使用共享 cookie 存储从所有网站读取身份验证 cookie。

    NSHTTPCookie *cookie;
    
    NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (cookie in [cookieJar cookies]) 
    {
       NSLog(@"%@", cookie);
    }
    

    或为您的网站获取 .net aspxauth cookie

    NSArray *cookiesForURL = [cookieJar cookiesForURL: [NSURL URLWithString: **MYURL**]];
    
    for (cookie in cookiesForURL)
    {
        if([cookie.name compare:@".ASPXAUTH"] == NSOrderedSame)
        {
            NSLog(@"%@", cookie);
            break;
        }
    }
    

    【讨论】:

      【解决方案3】:

      我解决了这个问题。问题与配置有关,因为 UIWebView 没有被视为标准的 Web 浏览器。我正在通过 .net 和 IIS 对用户进行身份验证。我在我网站的 App_Browser 目录中添加了一个 generic.browser 文件。文件内容为:

      <browsers>
        <browser refID="Mozilla" >
          <capabilities>
            <capability name="cookies"  value="true" />
          </capabilities>
        </browser>
        <browser refID="Default">
            <capabilities>
              <capability name="cookies" value="true" />
            </capabilities>
          </browser>
      </browsers>
      

      纠正问题的行是capability允许cookies。

      我使用的解决方案的参考是这样的

      Asp.Net Forms Authentication when using iPhone UIWebView

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        • 2023-04-05
        • 2016-03-02
        • 2020-02-27
        相关资源
        最近更新 更多