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)
看来以前存在于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)
来源(所有学分均归功于原始答案的作者)
如果您确信自己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 无法访问具有该属性的 cookieDocument.cookie;它仅发送到服务器。例如,保存服务器端会话的 cookie 不需要可供 JavaScript 使用,并且应该具有 HttpOnly 属性。此预防措施有助于减轻跨站点脚本 ( XSS ) 攻击。
| 归档时间: |
|
| 查看次数: |
8374 次 |
| 最近记录: |