【问题标题】:JSESSIONID in javascript - How can Open Layers 3 obtain it?JSESSIONID in javascript - Open Layers 3 如何获取它?
【发布时间】:2016-03-06 22:57:04
【问题描述】:

我创建了一个 Open Layers 3 地图,它从我的服务器加载它的图块,我不传输用户 ID,它是服务器端识别的,所以如果没有用户登录,地图将无法工作。

到目前为止一切顺利,一切正常。如果有人点击地图中的某个功能,我也想向服务器发送一些请求,但也不发送用户 ID,因为无论如何都应该有一个会话。但是,如果我向服务器发送 AJAX 请求,那么请求中将缺少 JSESSIONID,并且每次发送请求时我都会获得一个新的会话 ID。

我知道这是由于 HttpOnly 标志,但让我感到困惑的是,开放层如何在其请求中包含 JSESSIONID,但我没有为我自己的 Ajax 请求获取它。

另请参见图片以了解区别:

-- GetTile 是 Open Layers 生成的请求

-- GetStarMapData 是自己编写的 Ajax 调用生成的请求

两个请求都只是访问服务器上的一个 servlet

【问题讨论】:

  • 您需要从您的服务器而不是 file:// 提供 HTML。
  • 是的,我只是好奇为什么它可以在开放层中工作

标签: javascript cookies session-cookies


【解决方案1】:

如果您明确打开 credentials support,跨域 XHR 请求(屏幕截图中的 Origin 表示您正在创建一个)仅包含 cookie。

xhr.withCredentials = true;

这将使其成为preflighted request,因此您必须配置服务器以正确响应 OPTIONS。

【讨论】:

  • 感谢您的快速回答,这就是问题所在 - 我想如果我没有在某个本地文件夹上测试该站点,而是从我的测试服务器加载它,那么它会起作用。