首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在vertx中创建cookie

在vertx中创建cookie
EN

Stack Overflow用户
提问于 2017-01-06 16:30:05
回答 2查看 3.9K关注 0票数 3

我想用vertx创建一个简单的cookie。

代码语言:javascript
运行
复制
import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpHeaders;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Cookie;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;

import java.util.Date;

public class HttpVerticle extends AbstractVerticle {
    @Override
    public void start() throws Exception {
        HttpServer server = vertx.createHttpServer();
        Router router = Router.router(vertx);
        router.route("/opt-out").handler(this::optOut);
        System.out.println("Server started @ 3000");
        server.requestHandler(router::accept).listen(3000);
    }

    public void optOut(RoutingContext context) {
        HttpServerRequest request = context.request();
        HttpServerResponse response = context.response();
        response.putHeader("content-type", "text-plain");
        response.setChunked(true);
        response.write("hellow world");
        Cookie cookie = Cookie.cookie("foo", "bar");
        context.addCookie(cookie);
        response.end();
    }
}

但当我查看浏览器时,我看到的不是带有"foo“名称的cookie,其值是"bar”。我做错了什么?

另外,我如何访问所有已标记的cookies?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-14 19:04:00

这就是在Vertx中设置cookie的方式。

代码语言:javascript
运行
复制
@Override
public void start(Future<Void> future) {
    Router router = Router.router(vertx);
    router.route().handler(CookieHandler.create());
    router.get("/set-cookie").handler(this::setCookieHandler);
}


public void setCookieHandler(RoutingContext context) {
    String name = "foo";
    String value = "bar";
    long age = 158132000l; //5 years in seconds
    Cookie cookie = Cookie.cookie(name,value);
    String path = "/"; //give any suitable path
    cookie.setPath(path);
    cookie.setMaxAge(age); //if this is not there, then a session cookie is set
    context.addCookie(cookie);

    context.response().setChunked(true);
    context.response().putHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
    context.response().putHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET");
    context.response().write("Cookie Stamped -> " + name + " : " +value);
    context.response().end();
}

谢谢。

票数 5
EN

Stack Overflow用户

发布于 2017-01-06 20:57:59

首先,您需要在路由器中添加CookieHandler。

这是addCookie方法的JavaDoc:

代码语言:javascript
运行
复制
router.route().handler(CookieHandler.create());
代码语言:javascript
运行
复制
/**
* Add a cookie. This will be sent back to the client in the response. The context must have first been 
* to a {@link io.vertx.ext.web.handler.CookieHandler} for this to work.
*
* @param cookie  the cookie
* @return a reference to this, so the API can be used 

因此,在响应中使用".end()“方法,而不是".write()”

代码语言:javascript
运行
复制
response.end("hellow world");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41501765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档