2014-12-31 83 views
0

我使用下面的代碼來構建NSHTTPCookie但沒有選項來設置的HttpOnly標誌餅乾的iOS:如何設置的HttpOnly標誌NSHTTPCookie

[cookieProperties setObject:@"name" forKey:NSHTTPCookieName]; 
[cookieProperties setObject:@"value" forKey:NSHTTPCookieValue]; 
[cookieProperties setObject:[NSNumber numberWithBool: NO] forKey:NSHTTPCookieDiscard]; 
[cookieProperties setObject:[dictionary objectForKey:@"isSecure"] forKey:NSHTTPCookieSecure]; 


[cookieProperties setObject:@"abc.xyz.com" forKey:NSHTTPCookieDomain]; 
[cookieProperties setObject:@"abc.xyz.com" forKey:NSHTTPCookieOriginURL]; 
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath]; 
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion]; 

回答

2

從Apple文檔:

中HTTPOnly屬性

指示是否接收器只應根據RFC 2965被髮送到HTTP服務器的一個布爾值(只讀)

宣言

SWIFT

var HTTPOnly: Bool { get } 

目的-C

@property(readonly, getter=isHTTPOnly) BOOL HTTPOnly 

返回YES如果此cookie只應通過HTTP標頭被髮送,NO 否則。

Cookie可能只被服務器(或JavaScript)標記爲HTTP。 標記爲這樣的Cookie只能通過HTTP 請求的URL中的HTTP頭髮送,該請求的URL與 各自的Cookie的路徑和域都相匹配。

您只能從服務器或通過javascript設置HTTPOnly標誌。這是通過本機iOS應用程序代碼無法實現的。

+0

如何將布爾值添加到NSHTTPCookieValue而不是字符串? –

+0

這個答案不完全正確,有一個無證的屬性允許創建httpOnly cookie。 – Kim

2

有一個undocumented cookie property key(通過@mikewest找到):

// NSHTTPCookie無證財產。
NSString * const kNSHTTPCookieHttpOnly = @「HttpOnly」;

我在Swift中試過了,它的代碼完成了預期的工作。

import Foundation 

extension HTTPCookiePropertyKey { 
    static let httpOnly = HTTPCookiePropertyKey("HttpOnly") 
} 

let cookie = HTTPCookie(properties: [ 
    .domain: "example.org", 
    .path: "/", 
    .name: "Cookie Example", 
    .value: "Om nom nom", 

    .version: 1, // RFC2965 for HttpOnly cookies 
    .httpOnly: true 
])! 

print(cookie.isHTTPOnly) // true 
相關問題