我怎样才能设置一个cookie?

OPf*_*fan 43 cookies reactjs

或者,我使用以下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)
 })
}
Run Code Online (Sandbox Code Playgroud)

现在,我想使用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);
Run Code Online (Sandbox Code Playgroud)

为了延长cookie的时间限制,我应该在反应方面写什么来接收cookie的会话时间?

spe*_*arp 95

似乎先前存在于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)


Ole*_*ets 10

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

1)首先,安装依赖(只是为了说明)

yarn add react-cookie
Run Code Online (Sandbox Code Playgroud)

或者

npm install react-cookie
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)

希望它有帮助。

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


bdo*_*gie 9

我使用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});
};
Run Code Online (Sandbox Code Playgroud)

  • 似乎react-cookie包已更新(破坏)此解决方案中使用的API.链接+1,我在下面发布了更新的答案. (3认同)

Ras*_*kul 8

只需使用react-cookie库:

npm install react-cookie
Run Code Online (Sandbox Code Playgroud)

索引.js:

import React from "react";
import ReactDOM from "react-dom";
import { CookiesProvider } from "react-cookie";
import App from "./App";

const rootElement = document.getElementById("root");
ReactDOM.render(
  <CookiesProvider>
    <App />
  </CookiesProvider>,
  rootElement
);
Run Code Online (Sandbox Code Playgroud)

用法:

反应挂钩:

import React from "react";
import { useCookies } from "react-cookie";

export default function App() {
  const [cookies, setCookie] = useCookies(["user"]);

  function handleCookie() {
    setCookie("user", "gowtham", {
      path: "/"
    });
  }
  return (
    <div className="App">
      <h1>React cookies</h1>
      <button onClick={handleCookie}>Set Cookie</button>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

class-based成分:

import React, { Component } from "react";
import { instanceOf } from "prop-types";
import { withCookies, Cookies } from "react-cookie";

class App extends Component {
  static propTypes = {
    cookies: instanceOf(Cookies).isRequired
  };

  state = {
    user: this.props.cookies.get("user") || ""
  };

  handleCookie = () => {
    const { cookies } = this.props;
    cookies.set("user", "gowtham", { path: "/" }); // setting the cookie
    this.setState({ user: cookies.get("user") });
  };

  render() {
    const { user } = this.state;
    return (
      <div className="App">
        <h1>React cookies</h1>
        {user && <p>{user}</p>}
        <button onClick={this.handleCookie}>Set Cookie</button>
      </div>
    );
  }
}

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


Mah*_*our 6

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

要查看 cookie 并确保您可以使用https://www.npmjs.com/package/react-native-cookie包。我曾经对它非常满意。

当然,提供时获取 凭据配置会执行此操作

credentials: "include", // or "same-origin" or "omit"
Run Code Online (Sandbox Code Playgroud)

嗯,但是如何使用它

--- 安装此包后 ----

获取 cookie:

import Cookie from 'react-native-cookie';

Cookie.get('url').then((cookie) => {
   console.log(cookie);
});
Run Code Online (Sandbox Code Playgroud)

设置cookies:

Cookie.set('url', 'name of cookies', 'value  of cookies');
Run Code Online (Sandbox Code Playgroud)

只有这个

但如果你想要一些,你可以做到

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(() => {
                ...
            })
        })
Run Code Online (Sandbox Code Playgroud)

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');
....
Run Code Online (Sandbox Code Playgroud)

现在,如果您想确保设置了 cookie,您可以再次获取以确保。

Cookie.get('url').then((cookie) => {
  console.log(cookie);
});
Run Code Online (Sandbox Code Playgroud)


Sma*_*osh 6

使用Vanilla JS,示例

document.cookie = `referral_key=hello;max-age=604800;domain=example.com`
Run Code Online (Sandbox Code Playgroud)

有关更多信息,访问:https : //developer.mozilla.org/zh-CN/docs/Web/API/Document/cookie


Thi*_*ath 6

您可以使用默认的 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();
},
Run Code Online (Sandbox Code Playgroud)

在react方法中调用java脚本函数如下,

createCookieInHour('cookieName', 'cookieValue', 5);
Run Code Online (Sandbox Code Playgroud)

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

let cookie = document.cookie.split(';');
console.log('cookie : ', cookie);
Run Code Online (Sandbox Code Playgroud)

请参阅以下文档了解更多信息 - URL

  • 好的解决方案 - 使用标准 JS API 而不是额外的依赖项。有关 document.cookie API 的完整文档,请参阅 https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie。 (2认同)

Per*_*ack 5

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

然后导入文件:

import { bake_cookie, read_cookie, delete_cookie } from 'sfcookies';
Run Code Online (Sandbox Code Playgroud)

创建一个cookie密钥:

const cookie_key = 'namedOFCookie';
Run Code Online (Sandbox Code Playgroud)

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

bake_cookie(cookie_key, 'test');
Run Code Online (Sandbox Code Playgroud)

删除它只是做

delete_cookie(cookie_key);
Run Code Online (Sandbox Code Playgroud)

并阅读:

read_cookie(cookie_key)
Run Code Online (Sandbox Code Playgroud)

简单易用。

  • 我尝试过“react-cookie”、“universal-cookie”,并在与这些包的“cookies.get("cookie_name")”的“未定义”结果进行了一天的斗争后,我终于遇到了这个解决方案和包“ sfcookies`对我有用。太感谢了!你救了我! (2认同)

小智 5

使用Js-cookie包

npm 我 js-cookie

import Cookies from 'js-cookie'

Cookies.set('auth', 'data') 
Cookies.get('auth')
Run Code Online (Sandbox Code Playgroud)

这个 npm 包对我有用并且也很好