我的vertx服务器是用Java编写的,当我想用Js创建一个Session时,我的浏览器没有带密钥的cookie。但是当我直接使用URL创建会话时,我的浏览器有一个cookie。 我的服务器:
router.route().handler(CookieHandler.create());
router.route().handler(SessionHandler.create(LocalSessionStore.create(vertx));
router.get("/log/:name/:password").handler(this::verifId);
public void verifId(RoutingContext routingContext) {
HttpServerRequest request = routingContext.request();
HttpServerResponse response = routingContext.response();
try {
Session s = routingContext.session();
DataBase.connect();
String name = request.getParam("name");
String password = request.getParam("password");
Boolean returnValue = DataBase.exist(name, password);
DataBase.disconnect();
if (returnValue) {
s.put("user", request.getParam("name"));
System.out.println(s.id());
response.end(Json.encodePrettily(s.id().toString()));
} else {
s.destroy();
response.end("null");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
和我的Js代码:
function tryToLogin(login, password){
var urlBuilder = 'https://localhost:8090/log/' + login + '/' + password;
$.ajax({
url : urlBuilder,
type: 'get',
dataType: 'json',
success : function(code_json, statut){
console.log(" il a repondu " + code_json);
}
});
}
答案 0 :(得分:0)
Vertx设置的唯一Cookie是“vertx-web.session”。您没有在示例中设置任何其他Cookie。
要检查cookie是否有效,您可以使用以下代码:
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
router.route().handler(CookieHandler.create());
router.route().handler(SessionHandler.create(LocalSessionStore.create(vertx)));
router.get("/login").handler((r) -> {
System.out.println("Got request");
System.out.println("Session cookie " + r.getCookie("vertx-web.session").getValue());
r.response().end("OK");
});
router.route("/*").handler(StaticHandler.create());
vertx.createHttpServer().requestHandler(router::accept).listen(8888);
和JS客户:
var urlBuilder = '/login';
$.ajax({
url : urlBuilder,
type: 'GET',
success : function(code_json, statut){
console.log("got" + code_json);
}
});
你会得到:
Session cookie <UUID>
并且:
gotOK
在JavaScript控制台中