开发者

Why doesn't NSHTTPCookieStorage save cookies correctly?

开发者 https://www.devze.com 2023-01-22 10:04 出处:网络
I\'m having some weird problems with NSHTTPCookieStorage in my iPhone app.When I invoke the login action on my web service, the service sends back an auth cookie named \"auth\" as well as some other c

I'm having some weird problems with NSHTTPCookieStorage in my iPhone app. When I invoke the login action on my web service, the service sends back an auth cookie named "auth" as well as some other cookies.

When I log the user out, I call a logout action on the server which removes the cookies. If I print the result of [NSHTTPCookieStorage cookies] before calling logout, I see the auth cookie as expected. After I log out, I see that the auth cookie is no longer there (as expected).

However, if I close the application and restart it, the auth cookie is back!

I'm not sure what's going on here. It would be one thing if NSHTTPCookieStorage simply didn't persist any cookies, but it appears to be saving some of them.

Does anyone know what's happening? 开发者_JAVA百科Do I need to manage cookies manually? Is there some way to commit what's in NSHTTPCookieStorage to disk?


There are three local storage mechanisms related URL requests that have an effect to how authentication challenges are handled: (obviously) NSHTTPCookieStorage, NSURLCredentialStorage and NSURLCache. NSURLCredentialStorage is probably the next place you should be looking at, but clearing all the caches is generally considered the surest way to have the effect that you want.

This snippet is handy: https://gist.github.com/559071 (clears all the caches).


Nick, I am assuming you are building on the IOS 4.x SDK with XCode 3.x. This may be a long shot, but you mentioned that you close the application and then start it back up again. As of IOS 4.x, multi-tasking is enabled by default on iPhone Apps. That means that whether you want it or not, your app will stay in memory if you simply close it as normal. The way to defeat this is go into your app-name-Info.plist and add the "Application does not run in the background" key to the list. Then place a check in the checkbox. I would recommend that you do a full clean and build at this point after saving your project. Also, would recommend that if you are running in the simulator that you completely reset the simulator by choosing "iPhone Simulator" and then "Reset Content and Settings" from the application drop-down menu.


I also faced the same problem and I solved it by using NSUserDefaults.

Please refer to this link.

0

精彩评论

暂无评论...
验证码 换一张
取 消