无法读取路由“/index”中的 cookie 'a=a;path=/index'

Can't read cookie 'a=a;path=/index' in route '/index'

// App.js
render() {
  return (
    <Switch>
      <Route exact path="/" component={A} />
      <Route path="/index" component={B} />
    </Switch>
  )
}

// A.jsx
import Cookies from 'universal-cookie'

handleClick = () => {
  const cookies = new Cookies()
  cookies.set('a', 'a', { path: '/index' })
  this.props.history.push('/index')
}

render() {
  return <Component onClick={this.handleClick} />
}

// B.jsx
import Cookies from 'universal-cookie'

componentDidMount() {
  const cookies = new Cookies()
  console.log(cookies.get('a')) // undefined
}

当从路由“/”链接到路由“/index”时,我无法读取 componentDidMount 中的 cookie 'a'。为什么会这样?以及如何在 B.jsx 中访问 c​​ookie 'a'?

您似乎只为路径 /index 设置 cookie,这意味着此 cookie 仅对名为 /index 的 url 可见。您甚至可以在 chrome 开发工具中检查列 Path。只需将 cookie 设置为 /.

我能够复制 OP 中所述的行为并进行了一些观察。

这是我发现的: 假设我们有一个 cookie path='/index'.

  1. 当我从路径为 /index 的任何页面设置 cookie 时。只有当我直接登陆 /index 页面时,该 cookie 才能访问。然后我可以在通过反应设置的任何路径上访问该路径特定的 cookie。
  2. 如果我登陆任何其他页面,它会显示 cookie 值未定义。

原因是 React 在内部使用 historyAPI 进行客户端导航,并且 cookie 不将 historyapi 修改后的路径视为 url,因此不提供 cookie 数据。

可以找到一点解释

因此,为了获取cookie数据,您需要设置path='/',因为它会允许在网站的所有页面上使用cookie,从而允许在网站的任何地方访问cookie,从而获取cookie数据与用户最初登陆的位置以及使用 historyapi 导航的 url 无关。