2011-10-24 53 views
2

我通過[NSHTTPCookieStorage setCookie]登錄API。 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/Reference/Reference.html我的應用[NSHTTPCookieStorage setCookie]破壞了瀏覽器的Cookie?

如果我在瀏覽器打開時登錄,已經使用同一個用戶登錄到同一個站點,那麼應用程序和瀏覽器都能正常工作。

但是如果我在我的瀏覽器中打開它,並返回到該網站,cookie已丟失。用戶未登錄。

這裏發生了什麼,有沒有辦法強制應用程序使用不同於瀏覽器的cookie?或者,如果我們在應用程序之間「共享」cookie,是否有任何方法可以使用已登錄的用戶cookie來登錄到我的應用程序而無需詢問用戶名/密碼?

回答

5

下面是創建一個新的cookie的代碼,爲你的要求: (XCode中未測試)

// Dictionary of attributes for the new cookie 
NSDictionary *newCookieDict = [NSMutableDictionary 
           dictionaryWithObjectsAndKeys:@".example.com", NSHTTPCookieDomain, 
                  @"Test Cookie", NSHTTPCookieName, 
                  @"/", NSHTTPCookiePath, 
                  @"test1234567890", NSHTTPCookieValue, 
                  @「2011-10-26 00:00:00 -0700", NSHTTPCookieExpires, nil]; 
// Create a new cookie 
NSHTTPCookie *newCookie = [NSHTTPCookie cookieWithProperties:newCookieDict]; 

// Add the new cookie 
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:newCookie]; 

特別注意字典的最後一個元素

+0

謝謝,問題是我有'NSHTTPURLResponse',我正在使用'cookiesWithResponseHeaderFields:'來創建一個cookie。擔心我的「自創」cookie在這個答案中不會保留頭字段創建的cookie的所有信息。 無論如何,我不認爲添加到期日期是我的基本問題的正確答案。即使使用設置爲將來的到期日期創建的cookie也會將我從瀏覽器中註銷。我需要一種方法來爲我的應用設置Cookie,而不是觸摸其他Cookie。類似於Firefox/Chrome/Safari不共享cookie的方式。 – cksubs

+0

我在這裏問了一個更具體的問題:http://stackoverflow.com/questions/7922460/private-cookie-for-only-my-app-why-is-it-influencing-the-browsers-cookie – cksubs

0

您是否爲Cookie設置了過期日期?如果不這樣做,NSHTTPCookie假設是會話只(link to docs

+0

那是當你聲明NSHTTPCookie?你怎麼用'cookiesWithResponseHeaderFields:forURL:'來做到這一點? – cksubs

+0

當你使用'cookiesWithResponseHeaderFields:forURL:'你獲得'NSArray'的'NSHTTPCookie'對象。你可以使用一個循環取每個'NSHTTPCookie',併爲每一個設置一個到期日期。 –

+0

你能發表一個編輯cookie的屬性的例子嗎? – cksubs

相關問題