V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
banksiae
V2EX  ›  Python

tornado 无法设置 cookie 的问题

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

    由页面来跳转,而不是前端人员来控制
    dikT
        5
    dikT  
       2017-03-23 13:10:51 +08:00
    或者简单点, 直接把登录放在后台渲染返回
    banksiae
        6
    banksiae  
    OP
       2017-03-23 14:49:07 +08:00
    @dikT sso 单点一般这么干
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1002 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:19 · PVG 06:19 · LAX 15:19 · JFK 18:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.