tornado 无法设置 cookie 的问题

2017-03-22 13:40:21 +08:00
 banksiae
背景:
1 、前后端分离,后端 tornado , 后端服务域名 se.wcc.com ,用 set_secure_cookie 设置 cookie
2 、后端服务器是本地的虚机 ubuntu , nginx 代理
3 、前端独立部署开发,链接类似 http://demo.o2o.com/register.html , 前端服务域名 demo.o2o.com
4 、前端服务器是另外的机器

现状:
1 、 tornado 的跨域限制已经放开了 set_header("Access-Control-Allow-Origin", "*")
2 、 nginx 的跨域限制也放开了
3 、 tornado 设置 secure cookie , postman 模拟接口请求, set_securer_cookie, get_secure_cookie 是 OK 的
4 、前端服务器过来的 get 请求, set_secure_cookie OK , 但是前端的 post 请求, post 方法中的 get_secure_cookie 拿不到 cookie

原先以为是浏览器安全限制的问题,关掉了 chrome 的安全策略,我本地的浏览器 OK 了,以为就结了。但是发现前端开发同学的浏览器,关掉 chrome 的安全策略之后,依然没有效果。

我的本地浏览器 OK 跟本地的虚机有关??

求教这种情况怎么解决 (以前前后端分离,关闭 chrome 同源策略就 OK 了)
2852 次点击
所在节点    Python
6 条回复
ccdjh
2017-03-22 17:09:57 +08:00
听你描述,不太清楚。

是执行 get 的时候, set_secure_cookie ,与 get_secure_cookie 没有问题。然后执行表单提交的时候, get_secure_cookie 拿不到 cookie 。

在使用 post 的时候,开启了 xsrf ,然后没有使用 {{ xsrf_form_html() }},犯了这个简单的错误?

如果前后分离,前端无法使用{{ xsrf_form_html() }} , 使用 self.xsrf_form_html()函数可以生成
banksiae
2017-03-22 18:53:35 +08:00
我描述没清楚,问题已经解决。
原因: cookie 无法跨站
解决方法:
1 、更改后端域名, domain 与前端一致
2 、 url 后面加上加密串,每次请求都带上,实现 cookie 的机制
janxin
2017-03-23 09:01:58 +08:00
嗯,跨域了
dikT
2017-03-23 13:10:00 +08:00
我是这样做的,
set_cookie....
self.write('''<script>window.location.href = "http://................./";</script>''')

由页面来跳转,而不是前端人员来控制
dikT
2017-03-23 13:10:51 +08:00
或者简单点, 直接把登录放在后台渲染返回
banksiae
2017-03-23 14:49:07 +08:00
@dikT sso 单点一般这么干

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/349436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX