Cookie问题,本地服务器无问题,部署到SAE后未能获取cookie信息

服务器端设置了cookie,希望关闭浏览器后下次再打开该网页时能够获取cookie信息。在本地服务器测试一切正常,将代码部署到SAE后,发现获取不到cookie内容。

这里涉及到两个页面,下单成功页面中保存cookie,查看订单页面获取cookie信息。
下单页面的jsp文件设置cookie的代码如下:
CookieBean cookieBean = new CookieBean();
cookieBean.setXxx(xxx); //设置bean属性

Cookie cookie = new Cookie(CookieBean.cookieName,cookieBean.getCookieString());
//cookie.setDomain(“.sinaapp.com”); //本地不使用,部署到SAE上时使用
cookie.setMaxAge(31536000); //for a year
cookie.setPath(request.getContextPath() + “/”);
response.addCookie(cookie);

使用IE浏览器,在下单成功后,查看cookie目录
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies
下确实生成了cookie文件。
但是访问查看订单页面时,按F12打开开发人员工具查看Http头部却发现没有刚创建的cookie信息,而本地测试时是可以看到的。

这又是怎么回事呢?

查看SAE文档,“常见问题”里面有相关问答只有这个:
保存cookie时Path如何设置?
在SAE Java环境中保存cookie和通常情况下没有什么区别,但是如果你需要设置Path的话需要加上contextPath。如:
cookie.setPath(request.getContextPath()+”/”);

在我的代码中是这样设置路径的,问题会出在哪里呢?
既然本地测试时Http头部包含了cookie信息,而SAE应用上没有,应该是浏览器在处理时产生的问题。
于是查看更多cookies文章,在这篇找到线索:
HTTP 代理如何正确处理 Cookie

原来我设置了domain为.sinaapp.com,而又设置了path为request.getContextPath()+”/”,也就是appVersion/appName,
这样只有在url为.sinaapp.com/appVersion/appName/的时候浏览器才会发送cookie给服务器,而实际上查看订单的jsp页面在根目录。
了解以上原因后,将cookie.setPath(request.getContextPath()+”/”);这一行注释掉,再次验证,可以看到cookie信息!
其实之前有怀疑过url问题,打开cookie文件可以看到url就是
appVersion.appName.sinaapp.com/appVersion/appName/,当时手动修改cookie文件,把后面的appVersion/appName/删除掉,发现没有效果,于是没有再认为是url问题。
由此可见,没有理解原理,即便有线索也会与之失之交臂!

回头再想起SAE官网那个关于path的问答,才知道原来重点是“但是如果你需要设置Path的话”!
所以在看官网文档时还是需要多注意上下文,否则容易产生误解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值