【问题标题】:Access Flask session cookies from custom domain从自定义域访问 Flask 会话 cookie
【发布时间】:2013-11-10 14:50:15
【问题描述】:

我的 Flask 应用程序的用户登录 https://example.com/login,但他们可以设置自定义域,例如 http://customdomain.com

我希望能够在用户访问他们的自定义域时访问 Flask 会话变量,以便在用户登录时我可以显示删除和修改用户界面控件。

当然,浏览器会阻止从创建它们的域以外的域访问 cookie。

对于如何解决这个问题有什么想法或方法吗?

【问题讨论】:

  • Cross-Domain Cookies的可能重复
  • 我也读过这个问题,但至少不认为它是重复的。他们在谈论 Java,这个问题已经存在 3 年了,从那时起情况发生了很大变化。 CORS 是一个现实,我正在使用 Flask 等。

标签: python flask


【解决方案1】:

这就是我所做的;似乎运作良好。我使用设置为truewithCredentials 对服务器进行AJAX JSONP 调用。服务器获取会话 cookie 并告诉客户端用户是否登录。根据响应,我可以向用户显示其他用户界面元素。

<script>

  $(".logged_in").hide();

  request = $.ajax({
    url: "http://example.com/ping/",
    type: "GET",
    dataType: "jsonp",
    xhrFields: {
      withCredentials: true
   }

});

request.done(function (response, textStatus, jqXHR){
    // log a message to the console

    if (response['logged_in'])
    {
      $(".logged_in").show();
    }
});

request.fail(function (jqXHR, textStatus, errorThrown){
  // log the error to the console
  console.error("The following error occurred: " + textStatus, errorThrown);
  console.log("jqXHR: " + JSON.stringify(jqXHR))
});

</script>

服务器代码:

def jsonp(func):
    """Wraps JSONified output for JSONP requests."""
    @wraps(func)
    def decorated_function(*args, **kwargs):
        callback = request.args.get('callback', False)
        if callback:
            data = str(func(*args, **kwargs).data)
            content = str(callback) + '(' + data + ')'
            mimetype = 'application/javascript'
            return current_app.response_class(content, mimetype=mimetype)
        else:
            return func(*args, **kwargs)
    return decorated_function


@app.route('/ping/')
@jsonp
def ping():

    if 'user_id' in session:
        print "session ping: %s" % session
        return jsonify(logged_in='true')

    else:
        print "session ping: not logged in"
        return jsonify(logged_in="false")

【讨论】:

    猜你喜欢
    • 2010-10-30
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2019-10-02
    • 2018-09-27
    • 1970-01-01
    相关资源
    最近更新 更多