我这里有一个非常神秘的谜题。我监控用户活动,并将其操作记录到用户配置文件,简单。我使用cookie作为用户的id。如果我之前从未见过用户,我会将随机值作为Cookie发出。之后,如果/当我再次看到那个人时,我会在随后的所有访问中重写他们的cookie值。到目前为止很标准的东西。奇怪的是,在几次请求之后,很少有入站cookie作为请求的一部分。以下是给定用户的访问日志的截断视图:
2015-02-19 12:14:06 ip:108.45.172.178 cookie:tx7Xd8e8InQNyceDFPgWHS1424376343 /path1 "othercookie=nk1bwo:fxx-2gop9,nk1btk:fxx-2gop8; userid=tx7Xd8e8InQNyceDFPgWHS1424376343; HASESSION=8888; AWSELB=<LONGSTRING>"
2015-02-19 12:14:07 ip:108.45.172.178 cookie:tx7Xd8e8InQNyceDFPgWHS1424376343 /path2 "othercookie=nk1bwo:fxx-2gop9,nk1btk:fxx-2gop8; userid=tx7Xd8e8InQNyceDFPgWHS1424376343; HASESSION=8888; AWSELB=<LONGSTRING>"
2015-02-19 12:14:07 ip:108.45.172.178 cookie:tx7Xd8e8InQNyceDFPgWHS1424376343 /path3 "othercookie=nk1bwo:fxx-2gop9,nk1btk:fxx-2gop8; userid=tx7Xd8e8InQNyceDFPgWHS1424376343; HASESSION=8888; AWSELB=<LONGSTRING>"
2015-02-19 12:14:08 ip:108.45.172.178 cookie:ybJRVsoDVxzJJ6SsdaaZSS1424376845 /path4 "HASESSION=8888; AWSELB=<LONGSTRING>"
2015-02-19 12:14:09 ip:108.45.172.178 cookie:ybJRVsoDVxzJJ6SsdaaZSS1424376845 /path5 "HASESSION=8888; AWSELB=<LONGSTRING>; userid=ybJRVsoDVxzJJ6SsdaaZSS1424376845"
2015-02-19 12:14:10 ip:108.45.172.178 cookie:ybJRVsoDVxzJJ6SsdaaZSS1424376845 /path6 "HASESSION=8888; AWSELB=<LONGSTRING>; userid=ybJRVsoDVxzJJ6SsdaaZSS1424376845"
2015-02-19 12:14:11 ip:108.45.172.178 cookie:ybJRVsoDVxzJJ6SsdaaZSS1424376845 /path7 "HASESSION=8888; AWSELB=<LONGSTRING>; userid=ybJRVsoDVxzJJ6SsdaaZSS1424376845"
2015-02-19 12:14:12 ip:108.45.172.178 cookie:ybJRVsoDVxzJJ6SsdaaZSS1424376845 /path8 "HASESSION=8888; AWSELB=<LONGSTRING>; userid=ybJRVsoDVxzJJ6SsdaaZSS1424376845"
按顺序,你可以看到一个时间戳,然后是ip,然后是我用于该请求的cookie值,然后是混淆的路径(许多丑陋的无关GET参数),然后最终转发入站请求上的cookie。
在第一个请求中,此用户设置了userid
Cookie,以及另一个不相关的Cookie,HAProxy为粘性会话设置的Cookie以及AWS ELB设置的Cookie(长度为138个字符)。
然后转到#4,我仍然有haproxy cookie和awselb cookie,但userid
和othercookie
不是该请求的一部分?他们去哪儿了?因此,我生成一个新的用户标识值,将其作为响应的一部分写入,并随后接收所有进一步的请求。发生了什么事?
这是另一个日志,显示了我在不同人的传出回复中写入标题的内容。我在res.setHeader('Set-Cookie', cookie_list)
行之前立即记录此信息:
2015-02-18 17:47:47 ip:66.56.52.46 cookiessetting: ["userid=HxfmJNtK7rSXUB1vOnGDkC1424310323; Domain=.mydomain.net; Path=/; Expires=Sat, 18 Feb 2017 01:47:47 GMT"]
2015-02-18 17:47:48 ip:66.56.52.46 cookiessetting: ["userid=HxfmJNtK7rSXUB1vOnGDkC1424310323; Domain=.mydomain.net; Path=/; Expires=Sat, 18 Feb 2017 01:47:48 GMT"]
2015-02-18 17:47:49 ip:66.56.52.46 cookiessetting: ["userid=HxfmJNtK7rSXUB1vOnGDkC1424310323; Domain=.mydomain.net; Path=/; Expires=Sat, 18 Feb 2017 01:47:49 GMT"]
2015-02-18 17:47:50 ip:66.56.52.46 cookiessetting: ["userid=HxfmJNtK7rSXUB1vOnGDkC1424310323; Domain=.mydomain.net; Path=/; Expires=Sat, 18 Feb 2017 01:47:50 GMT"]
2015-02-18 17:47:51 ip:66.56.52.46 cookiessetting: ["userid=X0AF14Lbz6sJ8nh45C7Tws1424310463; Domain=.mydomain.net; Path=/; Expires=Sat, 18 Feb 2017 01:47:51 GMT"]
2015-02-18 17:47:53 ip:66.56.52.46 cookiessetting: ["userid=X0AF14Lbz6sJ8nh45C7Tws1424310463; Domain=.mydomain.net; Path=/; Expires=Sat, 18 Feb 2017 01:47:53 GMT"]
2015-02-18 17:47:54 ip:66.56.52.46 cookiessetting: ["userid=X0AF14Lbz6sJ8nh45C7Tws1424310463; Domain=.mydomain.net; Path=/; Expires=Sat, 18 Feb 2017 01:47:54 GMT"]
2015-02-18 17:47:56 ip:66.56.52.46 cookiessetting: ["userid=X0AF14Lbz6sJ8nh45C7Tws1424310463; Domain=.mydomain.net; Path=/; Expires=Sat, 18 Feb 2017 01:47:56 GMT"]
这显示同样的事情,17:47:51的请求在没有入站cookie的情况下进入,因此它生成了一个新的并且用于所有后续请求。 cookie设置如何?我很确定它是如何工作的......
我的设置是我让AWS ELB将请求发送到一组ec2实例,在每个ec2实例上,我将HAProxy作为反向代理发送到一堆不同的开放端口。端口/进程是node.js / express。非常标准的技术。
像这样的cookie有时会迷路吗?互联网上的其他玩家(isp&s; s)会做这样的坏事吗?为什么他们会删除我的userid
Cookie而不是AWSELB
?我真的很难过这个,我真的很感激这里的帮助....
修改 这是我进行cookie设置的代码,我知道有更新的方法可以在express中进行,但这应该可行吗?:
var futuredate = new Date().getTime() + 2*365*24*60*60*1000;
var datestring = new Date(futuredate).toUTCString()
var cookie_list = []
cookie_list.push('userid ='+cookieval+'; Domain=.mydomain.net; Path=/; Expires='+datestring);
if(someconditional)
cookie_list.push('othercookie ='+val+'; Domain=.mydomain.net; Path=/; Expires='+datestring);
res.setHeader('Set-Cookie', cookie_list)