cookie 值未定义(react-cookie 2.0.6)

svn*_*vav 2 javascript cookies reactjs react-redux

我在实现 react cookies v^2 时遇到问题。我使用 webpack-dev-server 进行测试。
这是一个结束日志:

警告:失败的上下文类型:上下文cookies在 中标记为必需withCookies(App),但其值为undefined。 在 Provider
中的 withCookies(App)

/App.jsx:

import React, { Component } from 'react';
import { CookiesProvider, withCookies, Cookies} from 'react-cookie'
import {Route, Switch, BrowserRouter} from 'react-router-dom';

//import RequireAuth from './RequireAuth';
import NotFoundPage from './NotFoundPage';
import LandingPage from './LandindPage';
import WorkSpace from './WorkSpace';
import ActivationPage from './ActivationPage';

class App extends Component {
  render() {
    return (
      <CookiesProvider>
        <BrowserRouter>
          <Switch>
            <Route exact={true} path="/" component={LandingPage}/>
            <Route path="/workspace" component={WorkSpace}/>
            <Route exact path="/activation" component={ActivationPage}/>
            <Route path="*" component={NotFoundPage}/>
          </Switch>
        </BrowserRouter>
      </CookiesProvider>
    );
  }
}

export default withCookies(App);
Run Code Online (Sandbox Code Playgroud)

/index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { createStore, applyMiddleware } from 'redux';
import reduxThunk from 'redux-thunk';
import reducers from './reducers';
import { Provider } from 'react-redux';

import App from './components/App';

const createStoreWithMiddleware = applyMiddleware(reduxThunk)(createStore);
const store = createStoreWithMiddleware(reducers);

ReactDOM.render(
  <Provider store = {store}>
    <App/>
  </Provider>
  ,
  document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

Pol*_*off 8

看来以前存在于react-cookienpm 包中的功能已移至universal-cookie. 通用 cookie 存储库中的相关示例现在是:

import Cookies from 'universal-cookie';
const cookies = new Cookies();
cookies.set('myCat', 'Pacman', { path: '/' });
console.log(cookies.get('myCat')); // Pacman
Run Code Online (Sandbox Code Playgroud)

来源(所有学分均归功于原始答案的作者)


Mar*_*ark 5

仅HTTP

如果您确信自己universal-cookie正确使用(或类似的包),并且仍然得到undefined
检查(在源代码中)cookie 的设置方式(或使用 cookie 检查器浏览器扩展检查它,例如Chrome 的 EditThisCookie,以及检查HttpOnly属性)。
如果HttpOnly设置为true,那么(根据定义)没有 javascript 能够访问它(这就是的要点HttpOnly)。因此该值将返回为undefined

来自developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

限制对 cookie 的访问

HttpOnlyJavaScript API 无法访问具有该属性的 cookie Document.cookie;它仅发送到服务器。例如,保存服务器端会话的 cookie 不需要可供 JavaScript 使用,并且应该具有 HttpOnly 属性。此预防措施有助于减轻跨站点脚本 ( XSS ) 攻击。