javascript 中的 JSESSIONID - Open Layers 3 如何获取它?
JSESSIONID in javascript - How can Open Layers 3 obtain it?
我创建了一个 Open Layer 3 地图,它从我的服务器加载它的图块,我不传输用户 ID,它是服务器端识别的,所以如果没有用户登录,地图将无法工作。
到目前为止一切顺利,一切正常。如果有人单击地图中的某个功能,我也想向服务器发送一些请求,也没有发送用户 ID,因为无论如何都应该有一个会话。但是,如果我向服务器发送 AJAX 请求,那么请求中将缺少 JSESSIONID,每次发送请求时我都会获得一个新的会话 ID。
我知道这是由于 HttpOnly 标志引起的,但让我感到困扰的是,Open Layers 如何在其请求中包含 JSESSIONID,但我自己的 Ajax 请求却没有得到它。
区别见图片:
-- GetTile是Open Layers产生的请求
-- GetStarMapData是自己写的Ajax调用生成的请求
两个请求都只是访问服务器上的一个servlet
跨源 XHR 请求(屏幕截图中的 Origin 表示您正在创建)仅在您明确打开 credentials support 时包含 cookie。
xhr.withCredentials = true;
这将使它成为 preflighted request,因此您必须配置服务器以正确响应 OPTIONS。
我创建了一个 Open Layer 3 地图,它从我的服务器加载它的图块,我不传输用户 ID,它是服务器端识别的,所以如果没有用户登录,地图将无法工作。
到目前为止一切顺利,一切正常。如果有人单击地图中的某个功能,我也想向服务器发送一些请求,也没有发送用户 ID,因为无论如何都应该有一个会话。但是,如果我向服务器发送 AJAX 请求,那么请求中将缺少 JSESSIONID,每次发送请求时我都会获得一个新的会话 ID。
我知道这是由于 HttpOnly 标志引起的,但让我感到困扰的是,Open Layers 如何在其请求中包含 JSESSIONID,但我自己的 Ajax 请求却没有得到它。
区别见图片:
-- GetTile是Open Layers产生的请求
-- GetStarMapData是自己写的Ajax调用生成的请求
两个请求都只是访问服务器上的一个servlet
跨源 XHR 请求(屏幕截图中的 Origin 表示您正在创建)仅在您明确打开 credentials support 时包含 cookie。
xhr.withCredentials = true;
这将使它成为 preflighted request,因此您必须配置服务器以正确响应 OPTIONS。