iphone - open - iOS UIwebView Auth Cookies
web view swift 4 (3)
Tengo un UIWebView
que carga un sitio web que Autenticación de usuario. El sitio crea una cookie de autenticación. Cuando esté en el navegador, a menos que borre sus cookies, siempre estará conectado. Cuando el xCODE se carga, puede ver la cookie que figura en la lista cuando mira el contenedor de cookies, pero no se envía a la vista web. Me gustaría saber cómo hacer que la webView sepa que la cookie de autenticación está allí, por lo que no sigue solicitando al usuario la autenticación cada vez.
Puede leer la cookie de autenticación de todos los sitios web utilizando el almacenamiento compartido de cookies.
NSHTTPCookie *cookie;
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [cookieJar cookies])
{
NSLog(@"%@", cookie);
}
O para obtener la cookie .net aspxauth para su sitio web
NSArray *cookiesForURL = [cookieJar cookiesForURL: [NSURL URLWithString: **MYURL**]];
for (cookie in cookiesForURL)
{
if([cookie.name compare:@".ASPXAUTH"] == NSOrderedSame)
{
NSLog(@"%@", cookie);
break;
}
}
Puede usar la clase NSURLConnection para realizar una solicitud HTTP para iniciar sesión en el sitio web y recuperar la cookie. Para realizar una solicitud, simplemente cree una instancia de NSURLConnection y asígnele un objeto delegado.
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
Luego, implementa un método delegado.
- (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
}
Conserva o copia la cadena de cookies. Cuando desee realizar otra solicitud, agréguela a su encabezado HTTP de su instancia de NSURLRequest.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];
[request addValue:cookie forHTTPHeaderField:"Cookie"];
PARA eliminar Cookie siempre que pueda llamar a este método:
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *each in [[[cookieStorage cookiesForURL:YOUR_URL] copy] autorelease]) {
[cookieStorage deleteCookie:each];
}
Resolví el problema. El problema tiene que ver con la configuración ya que UIWebView no se ve como un navegador web estándar. Estoy autenticando al usuario a través de .net e IIS. Agregué un archivo generic.browser en el directorio App_Browser de mi sitio web. El contenido del archivo es:
<browsers>
<browser refID="Mozilla" >
<capabilities>
<capability name="cookies" value="true" />
</capabilities>
</browser>
<browser refID="Default">
<capabilities>
<capability name="cookies" value="true" />
</capabilities>
</browser>
</browsers>
La línea que corrige el problema es la capacidad que permite las cookies.
La referencia a la solución que utilicé fue esta
Autenticación de formularios Asp.Net al usar iPhone UIWebView