9

使用 cookie 进行用户识别的项目。

当用户到达时,它调用服务(在 localhost 中运行),服务发送带有响应头的 cookie 如下所示:

curl 'http://127.0.0.1:8000/api/v1.0/tracking' -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://local.com:8080' -H 'Access-Control-Request-Headers: content-type,x-forwarded-for' --compressed

响应标头如下所示:

HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 60
Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, x-forwarded-for
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, PATCH, GET
Content-Length: 0
Content-Type: text/plain; charset=utf-8
Set-Cookie: id=random_id_123_123; expires=Wed, 06-Dec-2017 10:57:36 GMT; Domain=.local.com; Path=/

然后在特定的用户操作之后,应用程序正在发送以下 API 请求:

curl 'http://127.0.0.1:8000/api/v1.0/tracking?event=video_added&user_id=123123123' -H 'Origin: http://local.com:8080' -H 'Accept: */*' -H 'Referer: http://local.com:8080/' -H 'Connection: keep-alive' --compressed

上述请求的请求标头如下所示:

GET api/v1.0/tracking?event=video_added&user_id=123123123 HTTP/1.1
Host: 127.0.0.1:8000
Connection: keep-alive
Accept: */*
Origin: http://local.com:8080
User-Agent: My user agent
Referer: http://local.com:8080/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

我期待cookie(random_id_123_123)与第一个请求一起接收,因为响应标头将是第二个请求的请求标头。

该网站运行在:http ://local.com:8080 (它实际上在本地机器上运行,我的 vhost 配置指向 127.0.0.1 local.com)并且它由 python 提供服务SimpleHTTPServer

设置 cookie 的后端服务也在 localhost 的 8000 端口上运行。似乎我在实施过程中遗漏了一些东西。那是什么?

编辑:这是代码

4

2 回答 2

8

您的问题是 cookie 仅基于域发送。你的代码有

var settings = {
  "crossDomain": true,
  "url": "http://127.0.0.1:8000/api/v1.0/tracking?event=video_added&tracking_id=123123123",
  "method": "GET",

}

该 url 是,如果您希望传递 cookie 127.0.0.1:8000,它应该是。local.com:8000

于 2017-12-08T13:46:52.447 回答
1

上次我检查时,默认情况下 curl 没有启用 cookie。

为此,您需要:

  • 使用参数 -b /path/to/cookiejar 读取 cookie。
  • 使用参数 -c /path/to/cookiejar 写入 cookie。

所以你的请求应该变成:

curl -c cookiejar 'http://127.0.0.1:8000/api/v1.0/tracking' \
-X OPTIONS -H 'Access-Control-Request-Method: POST' \
-H 'Origin: http://local.com:8080' \
-H 'Access-Control-Request-Headers: content-type,x-forwarded-for' \
--compressed

和:

curl -b cookiejar 'http://127.0.0.1:8000/api/v1.0/tracking?event=video_added&user_id=123123123' \
 -H 'Origin: http://local.com:8080' \
 -H 'Accept: */*' \
 -H 'Referer: http://local.com:8080/' \
 -H 'Connection: keep-alive' --compressed
于 2017-12-14T19:16:32.927 回答