2016-11-21 62 views
0

我在VertX中創建Cookie,並且希望在用戶註銷後再次將其刪除。VertX Web不刪除Cookies

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:

enter image description here

當我想再次刪除的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!") 

我可以看到正在打印的消息說,餅乾將被刪除,但是當我刷新資源在Chrome中,全部設置在登錄的cookie仍然存在。包括atom-session

我這樣做是錯誤還是這是一個VertX的錯誤?

回答

5

removeCookie方法將從請求對象中刪除它,但不會從Web客戶端刪除cookie。爲了強制將其從客戶端中刪除,必須將cookie發送回到過期日期。例如,你應該這樣做:

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

這不是一個vert.x功能本身,但餅乾如何工作。

+0

這確實有效,沒有考慮將其年齡設置爲0.我認爲將值設置爲null可能有效,但那只是拋出空指針異常。謝謝你的回答! –