脚本无法读取Cookie

时间:2019-02-06 04:31:16

标签: javascript reactjs google-chrome cookies flask

我正在尝试使用IF OBJECT_ID('dbo.checks', 'U') IS NOT NULL DROP TABLE dbo.checks; CREATE TABLE checks ( queries int primary key identity(1,1), Payee varchar(30), Amount decimal(5,2), Remarks varchar(50) ); # followed by insert 包通过以下Javascript代码从浏览器中读取Cookie。但是,cookie未被读取。

js-cookie

使用以下使用import Cookies from 'js-cookie'; var cookie_name = 'cookie'; var cookie = Cookies.get(cookie_name); console.log(cookie); 的Python代码创建cookie。

Flask

Flask应用程序具有以下参数

response.headers.add('Access-Control-Allow-Headers', 'Content-Type, text/plain')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
response.headers.add('Access-Control-Allow-Credentials', 'true')
response.set_cookie(key='cookie',
                value=payload,
                domain='<url>')

以上,我已经关闭了app = Flask(__name__) app.config['DEBUG'] = True app.config['SESSION_COOKIE_HTTPONLY'] = False 标志,因此我的脚本应该能够读取cookie。我也无法在浏览器中使用HttpOnly来查看Cookie。有什么原因导致我的JS代码无法读取Cookie?

3 个答案:

答案 0 :(得分:0)

您应该使用“ react-cookie”,并通过npm安装它。然后在您的组件中尝试使用Cookie导入HOC

import { withCookies } from 'react-cookie';

通过键获取cookie绑定

    function getCookieFucnctionTest(myRecordFromCookies) {
       var value = "; " + document.cookie;
       var parts = value.split("; " + myRecordFromCookies+ "=");
       if (parts.length === 2) return parts.pop().split(";").shift();
     }

在使用getCookieFucnctionTest并将其存储为参数后

使用HOC导出组件

export default withCookies(MyComponent);

答案 1 :(得分:0)

如果您无法在浏览器控制台中看到该cookie,则表示该cookie未被设置或仅通过HTTP设置。

SESSION_COOKIE_HTTPONLY仅会影响Flask设置的会话cookie,看来您正在尝试完全设置其他cookie。

我会

  1. 确认确实设置了cookie(您可以通过开发工具进行检查)
  2. 如果正在设置,并且以某种方式仅通过HTTP设置,请更改代码:

...

response.set_cookie(key='cookie', value=payload, domain=<url>, httponly=False)

答案 2 :(得分:0)

您无法通过console.log(document.cookies)查看cookie的事实可能表明cookie的域或路径与浏览器试图访问的内容不匹配。

EG:如果您的后端/ Flask应用程序在api.example.com:8080上运行,并且客户端使用www.example.com:80,则您需要将域显式设置为.example.com以使其可读在您的域中进行全局设置,同时在AJAX请求上设置Cookie时也可能会导致CORS错误,您可能需要向Flask添加以下标头:

response.headers.add('Access-Control-Allow-Headers', 'Content-Type, Set-Cookie')
response.headers.add('Access-Control-Allow-Origin', 'http://www.example.com')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
response.headers.add('Access-Control-Allow-Credentials', 'true')
response.set_cookie(key='cookie',
                value=payload,
                domain='.example.com')

您还可以强制执行path='/',但是Flask似乎默认会执行此操作,无论如何,即使在路径不同的情况下,您也应该能够看到Cookie,但您可以在设置的DevTools上的相同域上进行设置屏幕Application > Cookies(如果路径设置不正确,console.log(document.cookies)不会产生任何结果,或者可能会剥夺您想要的Cookie)