Python中tornado无法设置cookie的问题如何解决?

背景:
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 了)
Python中tornado无法设置cookie的问题如何解决?


7 回复

听你描述,不太清楚。

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

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

如果前后分离,前端无法使用{{ xsrf_form_html() }} , 使用 self.xsrf_form_html()函数可以生成


我描述没清楚,问题已经解决。
原因: cookie 无法跨站
解决方法:
1 、更改后端域名, domain 与前端一致
2 、 url 后面加上加密串,每次请求都带上,实现 cookie 的机制

嗯,跨域了

我是这样做的,
set_cookie…
self.write(’’’<script>window.location.href = “http://…/”;</script>’’’)

由页面来跳转,而不是前端人员来控制

或者简单点, 直接把登录放在后台渲染返回

sso 单点一般这么干

回到顶部