3

我正在尝试创建 cookie,但在浏览器中没有看到任何 cookie。取而代之的是,我在 Postman 上得到了不同的输出,在 chrome 浏览器上得到了不同的输出。

打击是我编写cookies的方式。

  1. 创建路线

    drop.get("create", handler:createCookie)
    
  2. 处理程序

    func createCookie(request: Request) throws -> ResponseRepresentable {
    
    let cookie = Cookie(name: "login", value:"value", expires: generateExpirationDate(), secure: true)
    request.cookies.insert(cookie)
    
    return "Done"
    }
    
  3. 下面是创建过期处理程序的函数

     func generateExpirationDate() -> Date {
      return Date() + (60 * 1) // 1 Minutes later
     }
    

在邮递员中,我得到了一个名为“vapor-sessions”的cookie 在此处输入图像描述

在 chrome 浏览器中,我得到了两个 cookie,如下图所示。 在此处输入图像描述

但是我想要的那个不在那里。!!!!!!

编辑

我也尝试过下面的代码,但 Postman 没有运气,但是这个“在 chrome 中工作”,我对其他浏览器有疑问!!!!

func createCookie(request: Request) throws -> ResponseRepresentable {

    let cookie = Cookie(name: "login", value:"value", expires: generateExpirationDate(), secure: true)

    let response = try Response(status: .ok, json: JSON(node: [
        "yo": "yoyo"
        ]))

    response.cookies.insert(cookie)


    return response
}
4

2 回答 2

3

您的预编辑代码不起作用,因为您将 cookie 添加到request,而不是response. 响应是发送到浏览器的内容,因此这是设置 cookie 的正确位置。

这是一个完整的例子:

import Foundation
import Cookies
import HTTP
import Vapor

let drop = Droplet()

drop.get("create") { request in
  let response = Response(status: .ok)
  let expiry = Date(timeIntervalSinceNow: 60)
  let cookie = Cookie(name: "login", value: "value", expires: expiry)
  response.cookies.insert(cookie)
  return response
}

drop.run()

使用curl检查 Vapor 发送的标头,您可以清楚地看到 cookie 的设置位置。

HTTP/1.1 200 OK
Set-Cookie: login=value; Expires=Sat, 14 Jan 2017 05:31:32 GMT; Path=/
Date: Sat, 14 Jan 2017 05:30:32 GMT
Content-Length: 0
于 2017-01-13T19:43:02.760 回答
1

在本地环境下 cookie 没有运行,我和 Postman 有同样的问题,你可以在真实环境中尝试,例如 Heroku,它是免费的。

也许为您测试使用 Postman 应用程序拦截器 Cookies 插件的 cookie 。

这段代码对我有用,我正在使用中间件控制器来设置 cookie..

let auth = AuthMiddleware(user: User.self) { value in
        return Cookie(
            name: "your_cookie_name",
            value: value,
            expires: Date().addingTimeInterval(60 * 60 * 5), // 5 hours
            secure: true,
            httpOnly: true
        )
    }
    drop.middleware.append(auth)

我希望我有帮助

于 2017-02-17T12:04:18.627 回答