2016-10-03 5 views
13

Как правило, я использую следующий ajax для установки cookie.Как я могу сделать, чтобы установить 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) 
}) 
} 

Теперь я хочу установить файл 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); 

Для того, чтобы расширить куки TimeLimit, что я должен написать в среагировать сторону, чтобы получить время сеанса печенья в?

ответ

30

Оказывается, что функциональность ранее присутствует в пакете react-cookie NPM был перемещен в universal-cookie. Соответствующий пример из universal-cookie repository сейчас:

import Cookies from 'universal-cookie'; 
const cookies = new Cookies(); 
cookies.set('myCat', 'Pacman', { path: '/' }); 
console.log(cookies.get('myCat')); // Pacman 
+1

Очень хороший ответ – LOTUSMS

7

Я установил файлы cookie в React, используя библиотеку rec-cookie, у него есть опции, которые вы можете передать в настройках, чтобы установить время истечения.

Проверьте это here

Пример его использования для Вашего случая:

import cookie from "react-cookie"; 

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

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

Похоже, что пакет react-cookie обновил (сломал) API, используемый в этом решении. +1 для ссылки, и я опубликовал обновленный ответ ниже. – speckledcarp

2

Очень простое решение с использованием пакета sfcookies. Вы просто должны установить его с помощью НПМ, например: НПМ установки sfcookies --save

Затем импортировать на файл:

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

создать ключ печенья:

const cookie_key = 'namedOFCookie'; 

на ваша функция отправки, вы создаете файл cookie, сохраняя данные на нем примерно так:

bake_cookie(cookie_key, this.state.LALALA); 

удалить это просто сделать

delete_cookie(cookie_key); 

и читать:

read_cookie(cookie_key) 

Простой и легкий в использовании.

Смежные вопросы