react-cookie无法设置expires或maxAge

时间:2017-12-17 23:07:30

标签: javascript reactjs cookies react-cookie

我似乎无法使用react-cookie设置cookie的过期...这是我的设置:

import { Cookies } from 'react-cookie'
const cookies = new Cookies()
import moment from 'moment'

以下尝试失败了:

cookies.set('cookieName', {key: value}, {path: '/', expires: new Date(Date.now()+2592000)})
cookies.set('cookieName', {key: value}, {path: '/', expires: moment().add(30, "days")})
cookies.set('cookieName', {key: value}, {path: '/', maxAge: 2592000})

Chrome继续呈现:

Expires
When the browsing session ends

4 个答案:

答案 0 :(得分:4)

来自Cookies的{​​{1}}似乎已移至react-cookie包。 所以以下内容应该有效:

universal-cookie

答案 1 :(得分:2)

一年后过期的示例

import Cookies from 'universal-cookie';

const cookies = new Cookies();
const current = new Date();
const nextYear = new Date();

nextYear.setFullYear(current.getFullYear() + 1);

cookies.set('cookieName', true, {
    path: '/',
    expires: nextYear,
});

您可以在此处详细了解如何使用Date.set https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear

答案 2 :(得分:2)

有点晚了,但是如果有人在外面,仍然会遇到麻烦。在通用Cookie中,请尝试使用constraints = ( {'type': 'eq', 'fun': lambda x: portfolio_return(x) - target}, {'type': 'eq', 'fun': lambda x: np.sum(x) - 1}, {'type': 'eq', 'fun': lambda x: np.sum(x[x>0]) - 0.65}, {'type': 'eq', 'fun': lambda x: np.sum(x[x>0]) - 0.35} ) 选项而不是maxAge

这是我如何工作的摘要。

expires

说实话,最好使用常规的cookie设置。 call operator

无论如何,无论如何加载,您都将不得不使用cookies.set("theme", 0, { path: "/", maxAge: 1000000 }); 与已设置的cookie进行交互。这是我的代码片段。连同useState挂钩供参考。

像此Info Here中所示,document.cookie会向您显示所有这样输出的cookie的列表。

document.cookie

因此,写出类似这样的内容。用“主题”代替您的cookie名称。这段代码将为您带来价值。

cookieOne=1; cookieTwo=poopy; cookieThree=etc

无论如何,您都会得到一个字符串,因此,如果它是一个int或其他任何适当转换的字符串。这是我的useState挂钩,其中我的cookie需要是一个int。

const docThemeCookie = document.cookie
  .split("; ")
  .find((row) => row.startsWith("theme"))
  .split("=")[1];

希望对仍然陷于困境的人有所帮助!

TLDR;

使用const [theme, setTheme] = useState(parseInt(docThemeCookie, 10)); 代替maxAge

使用expires检查状态的初始cookie值。

答案 3 :(得分:0)

好的,所以这对于你们中的一些人来说可能是一个简单的解决方案。 (包括我自己)在添加 30 天或 2592000 秒的最大年龄之前,我让我的应用程序在 .set 方法中使用没有 maxAge 属性的通用 cookie 运行。当我将 maxAge: 2592000 添加到我的 set cookie 方法时,浏览器说它仍然会在会话结束时过期。对我来说,解决方法是清除开发工具 -> 应用程序 -> 存储 -> 清除站点数据中的应用程序数据,然后重新登录我的应用程序,并将 cookie 正确设置为在 30 天后过期。供参考:

cookies.set("loggedinUserId", response.data.userID, { path: '/', maxAge: 2592000 });