iOS应用退出时的Cookies

今天碰到一个Case是说App在重启后需要重新登录,研究了一下,发现是因为保存tokencookie在App重启后被自动删除了,以至于App重启后,即使token还没有失效,用户也得重新登录。

一开始分析如下的token的时候,就发现有个奇怪点,就是expiresDate为空:

<NSHTTPCookie 
version:0 
name:"JSESSIONID" 
value:"B838F778DBD85030ACD9AFB212B66337" 
expiresDate:(null) 
created:2017-08-03 07:37:29 +0000 
sessionOnly:TRUE 
domain:"******"
partition:"none" 
path:"/******" 
isSecure:TRUE>

另外一个不为空的cookie在App重启后依然在,但是这个却被删除了,后面发现:

iOS 默认在应用退出时删除Cookie
可以通过移除Cookie的'NSHTTPCookieDiscard'标志改变这个行为

在移除cookieNSHTTPCookieDiscard属性,并设置NSHTTPCookieExpires后,iOS就不会在App退出时,自动删除这个cookie

    NSHTTPCookie *cookie;
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (cookie in [storage cookies]) {
        if (cookie.expiresDate == nil) {
            NSMutableDictionary *properties = [[cookie properties] mutableCopy];
            
            NSDate *expiresDate = [NSDate dateWithTimeIntervalSinceNow:3600];//1hour
            properties[NSHTTPCookieExpires] = expiresDate;
            
            [properties removeObjectForKey:NSHTTPCookieDiscard];
            
            [storage setCookie:[NSHTTPCookie cookieWithProperties:properties]];
        }
    }

注意这里,我一开始试着直接设置失效时间,而没有移除Discard标志,这种情况下失效时间是无法设置成功的。

至于cookieexpireDate,是在Web Server中设置的,比如对于Tomcat,在web.xml中:

<session-config>
    <session-timeout>525600</session-timeout> 
    <cookie-config>
        <max-age>31536000</max-age>
    </cookie-config>
</session-config>

引用

iOS Cookies 每次退出应用都被清除解决方法
JSESSIONID Cookie with Expiration Date in Tomcat

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容