3

我正在使用以下代码构造 NSHTTPCookie 但是没有选项可以为 cookie 设置 httpOnly 标志

[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];
4

2 回答 2

11

有一个未记录的 cookie 属性键(通过@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
于 2017-01-17T12:44:36.097 回答
3

从苹果文档:

HTTPOnly 属性

一个布尔值,指示接收器是否应仅根据 RFC 2965 发送到 HTTP 服务器。(只读)

宣言

迅速

var HTTPOnly: Bool { get } 

目标-C

@property(readonly, getter=isHTTPOnly) BOOL HTTPOnly

如果此 cookie 仅应通过 HTTP 标头发送,则返回 YES,否则返回 NO。

Cookie 只能由服务器(或 javascript)标记为 HTTP。标记为此类的 Cookie 只能通过 HTTP 请求中的 HTTP 标头发送,以获取与相应 Cookie 的路径和域相匹配的 URL。

您只能从服务器或通过 javascript 设置 HTTPOnly 标志。这是通过原生 iOS 应用程序代码无法实现的。

于 2015-05-20T07:35:02.300 回答