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))

その Cookie が Chrome で表示されるようになりました。

ここに画像の説明を入力

その 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 を強制的に削除するには、有効期限を指定して Cookie を返送する必要があります。たとえば、次のようにする必要があります。

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

これは vert.x の機能そのものではなく、Cookie の仕組みです。

于 2016-11-22T15:40:35.293 に答える