我该如何在反应中设置Cookie?


76

最初,我使用以下ajax设置cookie。

function setCookieAjax(){
  $.ajax({
    url: `${Web_Servlet}/setCookie`,
    contentType: 'application/x-www-form-urlencoded;charset=utf-8',
    headers: { 'Access-Control-Allow-Origin': '*',
               'username': getCookie("username"),
              'session': getCookie("session")
    },
    type: 'GET',
    success: function(response){
      setCookie("username", response.name, 30);
      setCookie("session", response.session, 30);}
  })
}

function setCookie(cname, cvalue, minutes) {
    var d = new Date();
    d.setTime(d.getTime() + (minutes*60*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}

export const getUserName = (component) => {
    setCookieAjax()
 $.ajax({
    url: `${Web_Servlet}/displayHeaderUserName`,
    contentType: 'application/x-www-form-urlencoded;charset=utf-8',
    headers: { 'Access-Control-Allow-Origin': '*',
                'username': getCookie("username"),
                'session': getCookie("session")
            },
    type: 'GET',
    success: function(response){
        component.setState({
        usernameDisplay: response.message
        })
   }.bind(component)
 })
}

现在,我想使用Servlet的添加cookie函数来设置cookie。但是我不知道如何实现我的目标。

Cookie loginCookie = new Cookie("user",user);  //setting cookie to expiry in 30 mins
        loginCookie.setMaxAge(30*60);
        loginCookie.setDomain("localhost:4480");
        loginCookie.setPath("/");

response.addCookie(loginCookie);

为了延长Cookie的时间限制,我应该在React端写些什么来接收Cookie的会话时间?

Answers:


148

看来以前在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

嗨,我已经安装了这个软件包,但是在导入它时出现一些错误。错误:ENOENT:没有这样的文件或目录,打开'D:\ XXX项目\用户22 oct \ Application1 \ node_modules \ universal-cookie \ node_modules \ cookie \ index。 js'–
KS

@KS npm install universal-cookie?检查消息中的路径。如果不存在,则说明您尚未安装。
C4d

这个软件包有一些问题。只要您没有重新加载页面,就可以访问cookie。重新加载后,您将获得undefined(可能是因为该行var cookies = new Cookies(),我不知道)。好累 我已经花了一天时间解决这个问题,但是还没有答案。我要更改我的cookie包。
Mahdieh Shavandi


16

我使用react-cookie库在React中设置cookie,它具有一些选项,您可以传入这些选项来设置到期时间。

看看这个 这里

在您的情况下使用它的示例:

import cookie from "react-cookie";

setCookie() => {
  let d = new Date();
  d.setTime(d.getTime() + (minutes*60*1000));

  cookie.set("onboarded", true, {path: "/", expires: d});
};

3
看来react-cookie软件包已更新(损坏)此解决方案中使用的API。+1的链接,我在下面发布了更新的答案。
speckledcarp

9

一个非常简单的解决方案是使用sfcookies包。您只需要使用npm进行安装即可,例如:npm install sfcookies --save

然后导入文件:

import { bake_cookie, read_cookie, delete_cookie } from 'sfcookies';

创建一个cookie密钥:

const cookie_key = 'namedOFCookie';

在您的Submit函数上,您可以通过如下方式保存cookie来创建cookie:

bake_cookie(cookie_key, 'test');

删除它只是做

delete_cookie(cookie_key);

并阅读:

read_cookie(cookie_key)

简单易用。


2
我已经尝试过了react-cookieuniversal-cookie经过这些软件包的undefined结果苦苦挣扎了一天cookies.get("cookie_name"),我终于找到了这个解决方案,并且该软件包sfcookies对我有用。非常感谢!你救了我!
Mahdieh Shavandi

5

默认情况下,当你你的URL,阵营本地设置cookie。

要查看Cookie并确保您可以使用https://www.npmjs.com/package/react-native-cookie软件包。我曾经很满意。

当然,提取会这样做

credentials: "include",// or "some-origin"

好吧,但是如何使用它

---安装此软件包后----

获取Cookie:

import Cookie from 'react-native-cookie';

Cookie.get('url').then((cookie) => {
   console.log(cookie);
});

设置cookie:

Cookie.set('url', 'name of cookies', 'value  of cookies');

只有这个

但是,如果您想要几个,就可以做到

1-作为嵌套:

Cookie.set('url', 'name of cookies 1', 'value  of cookies 1')
        .then(() => {
            Cookie.set('url', 'name of cookies 2', 'value  of cookies 2')
            .then(() => {
                ...
            })
        })

2-一起回来

Cookie.set('url', 'name of cookies 1', 'value  of cookies 1');
Cookie.set('url', 'name of cookies 2', 'value  of cookies 2');
Cookie.set('url', 'name of cookies 3', 'value  of cookies 3');
....

现在,如果要确保已设置cookie,则可以再次获取以确保。

Cookie.get('url').then((cookie) => {
  console.log(cookie);
});

4

一点更新。有一个可用于react-cookie的钩子

1)首先,安装依赖项(仅作说明)

yarn add react-cookie

要么

npm install react-cookie

2)我的用法示例:

// SignInComponent.js
import { useCookies } from 'react-cookie'

const SignInComponent = () => {

// ...

const [cookies, setCookie] = useCookies(['access_token', 'refresh_token'])

async function onSubmit(values) {
    const response = await getOauthResponse(values);

    let expires = new Date()
    expires.setTime(expires.getTime() + (response.data.expires_in * 1000))
    setCookie('access_token', response.data.access_token, { path: '/',  expires})
    setCookie('refresh_token', response.data.refresh_token, {path: '/', expires})

    // ...
}

// next goes my sign-in form

}

希望对您有所帮助。

非常感谢您提出改进上述示例的建议!


3

您可以使用默认的JavaScript cookie设置方法。这个工作完美。

createCookieInHour: (cookieName, cookieValue, hourToExpire) => {
    let date = new Date();
    date.setTime(date.getTime()+(hourToExpire*60*60*1000));
    document.cookie = cookieName + " = " + cookieValue + "; expires = " +date.toGMTString();
},

在react方法中调用Java脚本功能,如下所示:

createCookieInHour('cookieName', 'cookieValue', 5);

您可以使用以下方式查看Cookie。

let cookie = document.cookie.split(';');
console.log('cookie : ', cookie);

请参考以下文档以获取更多信息-URL

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.