2012-11-04 47 views
1

第一次啓動我的應用程序並登錄時,我得到一個會話,我需要執行一些查詢(這是我如何知道誰已登錄)。使用AFNetworking,每次啓動應用程序後PHPSESSID都會更改

無論如何,如果我殺了應用程序並重新啓動它,我會得到一個新的會話ID。爲什麼?在過去,我的iOS應用程序存儲會話cookie。我想。

+0

你殺的應用程序,或者backgrounding呢? – Alan

+0

我在殺應用程序。 –

+0

當我殺死並重新啓動我的應用程序時,我希望會話cookie不會被刪除。這可能嗎? –

回答

4

您需要手動堅持餅乾到磁盤NSCoding應用程序終止之前,然後加載它們在應用程序啓動,就像這樣:

NSData *cookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"SavedCookies"]; 
if ([cookiesData length] > 0) { 
    for (NSHTTPCookie *cookie in [NSKeyedUnarchiver unarchiveObjectWithData:cookiesData]) { 
     [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; 
    } 
} 
2

HTTP會話被設計爲短暫的。通常這被設置爲瀏覽器的生命或最近瀏覽器標籤的生命。只要瀏覽器選項卡保持打開狀態,某些瀏覽器現在就會在應用程序啓動之間存儲會話,但這對用戶來說很方便。

如果您之前的應用程序維護了應用程序啓動和終止之間的會話,這是執行會話存儲過程中的一個錯誤。

我不會推薦使用會話來存儲長期數據。爲此,請使用NSUserDefaults或考慮使用SqlLite存儲。

編輯地址評論問:

我應該如何構建應用程序,因此用戶只需要登錄一次安裝應用程序時。

有很多方法可以實現這一點,具體取決於您擁有的系統的哪些部分。

概念上最簡單的情況是您擁有網絡服務。在這種情況下,您可以存儲用戶憑據,並且每次啓動應用程序時,都會將用戶登錄,並使用該會話標識符,就像您現在使用的那樣。

當爲此構建UI時,我會有一個複選框,要求用戶記住我;基本上要求他們允許在手機上存儲他們的信用。

技巧部分是如何正確保護用戶憑證。

+0

那我該如何完成這個場景呢? 用戶登錄,用戶殺死應用程序,用戶啓動應用程序,用戶仍然登錄(例如,服務器仍然有辦法識別用戶並相應地訪問數據) –

相關問題