2015-01-30 12 views
9

C'è questo nuovo grande metodo di NSHTTPCookieStorage, disponibile da MacOS 10.10 e iOS 8.0. Indovinando dal numero trascurabile di hit di Google, nessuno lo ha ancora notato. Non è così sorprendente, dato che non è ancora presente nei documenti del portale di sviluppo di Apple, solo nell'intestazione. Ma spero ancora che qualcuno sappia come usarlo, perché non lo faccio :) Sto cercando di usarlo per cancellare tutti i cookie invece dell'iterazione imbarazzante del barattolo dei biscotti. Così ho chiamato conCome si suppone che venga usato `removeCookiesSinceDate`?

[NSDate dateWithTimeIntervalSince1970:0] 

e BOOM, EXC_BAD_ACCESS in MemoryCookies::visitCookies. Ok UN * X epoca era troppo meschino, probabilmente. Così ho provato

[NSDate dateWithTimeIntervalSinceNow:-86400]; 

e BOOM di nuovo. Quindi ho continuato a dividere l'intervallo e ho scoperto che in effetti vuole almeno un cookie almeno vecchio come il parametro date. Quindi dovrai comunque ripetere i cookie per trovare il più vecchio e quindi chiamare il nuovo metodo brillante. È così ridicolmente poco pratico che ho persino il coraggio di chiamarlo un insetto.

Pensieri?

+0

FWIW, https://github.com/mluton/SafariCookies sembra funzionare. Non ha un'opzione per la data, ma ha un'opzione "tutto" e l'origine è disponibile per le mod. Lo uso con una lista di esclusione, quindi posso tenere alcuni "bravi ragazzi". – WGroleau

risposta

2

Funziona come previsto almeno da iOS 8.1, ovvero rimuove i cookie indipendentemente dall'età e non si arresta in modo anomalo. È interessante notare che è ancora solo in the headers ma non nel riferimento Cocoa per iOSOSX. Probabilmente qualcosa con NSHTTPCookieStorage è ancora "API in sviluppo" da iOS 2.0.

UPDATE Ora anche in Cocoa reference docs

2

Io credo che questo è un bug in tutte le versioni di iOS 8. sono stato in grado di attivare questo in iOS 8.3. Ho deciso di eliminare manualmente i cookie come segue:

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]; 
for (NSHTTPCookie *cookie in cookies) { 
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; 
}