1

我正在 VertX 中创建 cookie,并希望在用户注销后再次删除它们。

AccountController.handleLogin(vertx, router.post("/login"))

...

fun handleLogin(vertx: Vertx, route: Route) {
    route.handler { rtx ->
            rtx.request().bodyHandler { btx ->
                vertx.executeBlocking<Login>({
                    it.complete(AccountController.login(Json.decodeValue(String(btx.bytes), Login::class.java)))
                }, {
                    if (it.succeeded()) {
                        // set some cookies
                        rtx.addCookie(Cookie.cookie("atom-session", it.result().session).setHttpOnly(true).setSecure(secure))

现在可以在 Chrome 中看到该 cookie:

在此处输入图像描述

当我想再次删除该 cookie 时:

AccountController.handleLogout(vertx, router.post("/logout"))

...

fun handleLogout(vertx: Vertx, route: Route) {
    route.handler { rtx ->
            rtx.request().bodyHandler { btx ->
                vertx.executeBlocking<Logout>({
                    val logout = Json.decodeValue(String(btx.bytes), Logout::class.java)

                    it.complete(AccountController.logout(logout))
                }, {
                    if (it.succeeded()) {
                        log.info("Cookies Will No Be Removed ...")
                        rtx.removeCookie("atom-session")
                        log.info("DONE!")

我可以看到正在打印的消息说 cookie 将被删除,但是当我在 Chrome 中刷新资源时,登录时设置的所有 cookie 仍然存在。包含atom-session

我做错了还是这是 VertX 中的错误?

4

1 回答 1

7

removeCookie方法将从请求对象中删除它,但不会从 Web 客户端删除 cookie。为了强制将其从客户端中删除,必须将 cookie 发送回并附上过期日期。例如你应该这样做:

rtx.getCookie("atom-session").setMaxAge(0)

这不是 vert.x 本身的特性,而是 cookie 的工作原理。

于 2016-11-22T15:40:35.293 回答