我在iOS应用程序中有Web视图,需要对身份验证cookie进行适当的身份验证.我正在寻找一种在iOS应用程序的webview中设置cookie的方法,而不必发出设置cookie的出站请求,因为我已经在客户端上有auth信息.
这篇文章向我们展示了UIWebView cookie的存储位置.
现在我正在加载一个隐藏的Web视图来发出一个出站请求,但是我不想做一个外部请求来设置一个简单的cookie.
在我的iPhone应用程序中,我希望能够在我的应用程序重新启动时重用相同的服务器端会话.服务器上的会话由cookie标识,cookie在每个请求上发送.当我重新启动应用程序时,该cookie已经消失,我不能再使用相同的会话了.
当我用它NSHTTPCookieStorage查找从服务器获得的cookie 时,我注意到的是[cookie isSessionOnly]返回YES.我得到的印象是,这就是为什么不会在重新启动应用时保存Cookie的原因.我需要做什么才能使我的cookie不仅仅是会话?我必须从服务器发送哪些HTTP标头?
是否可以在持久存储的iPhone应用程序中设置cookie,以便以后当用户在Mobile Safari中时,该cookie可以发送到网络服务器?
我的应用程序需要一个注销按钮,我有以下代码:
while ([[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] count] != 0) {
for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
}
Run Code Online (Sandbox Code Playgroud)
(只是在那里确保它们被删除,但它只运行一次)
如果我在上面的代码之后NSLog记录共享cookie存储,它输出数组为空.然而,我终止应用程序或只是关闭它,然后NSLog应用程序启动后的第一件事,共享cookie存储的描述,所有的cookie仍然存在.
我已经尝试Cookie在for循环中设置为nil,甚至尝试将dealloc发送到cookie(我知道你不应该这样做,但我现在正在尝试任何事情)
我想,以节省会议UIWebView在提示如下此链接:
- (NSURLRequest*)addCookies:(NSArray *)cookies forRequest:(NSURLRequest *)request
{
NSMutableURLRequest *mutableRequest = [request mutableCopy];
if ([cookies count] > 0)
{
NSHTTPCookie *cookie;
NSString *cookieHeader = nil;
for (cookie in cookies)
{
if (!cookieHeader)
{
cookieHeader = [NSString stringWithFormat: @"%@=%@",[cookie name],[cookie value]];
}
else
{
cookieHeader = [NSString stringWithFormat: @"%@; %@=%@",cookieHeader,[cookie name],[cookie value]];
}
}
if (cookieHeader)
{
[mutableRequest setValue:cookieHeader forHTTPHeaderField:@"Cookie"];
}
return [mutableRequest copy];
}
return nil;
}
Run Code Online (Sandbox Code Playgroud)
并在viewDidLoad:
NSURLRequest *webRequest = [NSURLRequest requestWithURL:homeURL];
NSArray *cookies …Run Code Online (Sandbox Code Playgroud) ios ×3
iphone ×3
cookies ×2
objective-c ×2
uiwebview ×2
cocoa-touch ×1
nshttpcookie ×1
nsurlrequest ×1