2011-01-04 3 views
50

Я собираюсь использовать NSHTTPCookieStorage в приложении iOS для управления куки-файлами, которые извлекаются из URL-адреса, и я понимаю, что он будет управлять кукисами во время выполнения вашего приложения. Тем не менее, мне было интересно, можно ли сохранить cookie после закрытия приложения. И затем снова прочитайте эти файлы cookie, когда приложение снова откроется. Делает ли NSHTTPCookieStorage сохранение файлов cookie между приложениями? Или только во время выполнения приложений? Нужно ли использовать CoreData, чтобы сохранить эти куки? `Сохраняющиеся файлы cookie в приложении iOS?

ответ

44

Необходимо перезагрузить куки-файлы, когда ваше приложение загружено. Я использую такой код:

NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:@"MySavedCookies"]; 
if([cookiesdata length]) { 
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata]; 
    NSHTTPCookie *cookie; 

    for (cookie in cookies) { 
     [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; 
    } 
} 

и он работает просто отлично.

+2

Является ли 'MySavedCookies' уже там? Или мне нужно сохранить это, когда мое приложение перестанет действовать? – Alex

+1

Вы должны сохранить его самостоятельно - это просто, где я спасу. – Magnus

+3

Хранение файлов cookie в пользовательских настройках по умолчанию может быть недостатком безопасности, так как все plist могут быть доступны с помощью таких инструментов, как iFunBox и т. Д. Они должны быть зашифрованы, но лучше всего следовать за ответом @gazreese. –

103

Вам не нужно сохранять файлы cookie самостоятельно, как это предлагается в другом ответе. NSHTTPCookieStorage сохранит файлы cookie для вас, но вы должны убедиться, что файлы cookie имеют дату истечения срока действия, установленную на стороне сервера.

Файлы cookie без истечения срока действия считаются «только сеансами» и будут очищены при перезапуске приложения. Вы можете проверить ситуацию «только для сеанса» через свойство BOOL в NSHTTPCookie. Это стандартный материал cookie, а не что-то особенное для iOS.

+0

Пришел сюда в поисках этой ясности, спасибо. Интересно, что он очищается при перезапуске приложения. Вы можете перезапустить Chrome на рабочем столе и открыть сеанс. – Dan2552

+0

+1 Теперь я понимаю, почему мои куки уже не там :). Благодаря !! – Niko

+0

Вы спасли меня много времени! Благодаря! –