首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
拉勾
V2EX  ›  Python

tornado 无法设置 cookie 的问题

  •  
  •   banksiae · 2017-03-22 13:40:21 +08:00 · 1710 次点击
    这是一个创建于 732 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景:
    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 了)
    6 回复  |  直到 2017-03-23 14:49:07 +08:00
        1
    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()函数可以生成
        2
    banksiae   2017-03-22 18:53:35 +08:00
    我描述没清楚,问题已经解决。
    原因: cookie 无法跨站
    解决方法:
    1 、更改后端域名, domain 与前端一致
    2 、 url 后面加上加密串,每次请求都带上,实现 cookie 的机制
        3
    janxin   2017-03-23 09:01:58 +08:00 via iPhone
    嗯,跨域了
        4
    dikT   2017-03-23 13:10:00 +08:00
    我是这样做的,
    set_cookie....
    self.write('''<script>window.location.href = "http://................./";</script>''')

    由页面来跳转,而不是前端人员来控制
        5
    dikT   2017-03-23 13:10:51 +08:00
    或者简单点, 直接把登录放在后台渲染返回
        6
    banksiae   2017-03-23 14:49:07 +08:00
    @dikT sso 单点一般这么干
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2242 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 17ms · UTC 07:42 · PVG 15:42 · LAX 00:42 · JFK 03:42
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1