졸업작품을 진행하던 중 사용자 정보를 다른 페이지에서 활용할 일들이 생겨 방법을 고민해봤다.
우선 기존에는 Redux를 이용하여 사용자가 로그인을 완료하면 Redux에 저장한 후 그 데이터를 활용하려 했다.
그러나, 이 방법의 심각한 문제점은 새로고침을 하면 Redux의 정보가 모두 날아간다는 것이었다.
따라서 사용자 정보를 로컬 브라우저에 담아야 했고, 쿠키를 생성하여 사용하기로 했다.
필수적인 쿠키 : 페이지 탐색, 웹사이트의 보안영역 접속, 검색을 포함한 웹사이트의 기본적인 기능의 활성화를 목적으로 사용.
이러한 쿠키들은 없으면 최적화된 기능 수행이 불가능하므로 별도의 사용자 동의 없이 활성화
기능 쿠키 : 사용자의 접속 지역 및 언어 등 웹서아트의 외관에 영향을 줄 수 있는 접속자 설정을 저장.
성능 쿠키 : 정보의 익명 수집 및 보고를 통해 웹사이트 운영자가 방문자와 웹사이트 사이의 상호작용을 이해하는데 도움을 주며, 유저와의 상호관계에 대한 통계자료를 제공함으로서, 최적화된 웹사이트 개발에 도움을 줌.
마케팅 쿠키 : 사용자의 웹사이트 방문 내역을 추적하며, 쿠키 제공자가 접속자의 경향 및 웹사이트 이용 패턴을 파악하도록 함으로서 사용자에게 관련성 높은 광고나 제품이 제공되는데 기여
npm install react-cookie
yarn add react-cookie
cookie를 설정 및 사용하려면 react-cookie에서 제공하는 useCookies라는 hook을 사용해야 한다.
import { useCookies } from 'react-cookie'
const [cookies, setCookie, removeCookie] = useCookies(['cookie_name'])
사용자가 로그인에 성공하면 서버로부터 받은 사용자의 정보를 쿠키에 저장한다.
const login = async (e: any) => {
e.preventDefault()
const result: any = await api.login(id, pwd)
if (result) {
handleCookie(result.data.userid, result.data.username, result.data.email)
} else {
alert('로그인 실패')
}
}
const handleCookie = (userid: string, username: string, email: string) => {
const expireDate = new Date()
expireDate.setMinutes(expireDate.getMinutes() + 10)
setCookie(
'cookie_name',
{
userid: userid,
username: username,
email: email,
},
{
path: '/',
expires: expireDate,
}
)
}
setCookie는 3가지의 매개변수를 받는다.
setCookie 함수의 설정에서 path를 지정하면 해당 페이지에서만 쿠키가 작동하며
'/'로 설정하면 전체 페이지에서 사용이 가능하다.
expires는 쿠키의 만료시간을 지정하는 변수이다.
이렇게 설정한 쿠키를 다른 페이지에서 사용하고 싶다면 해당 페이지의 컴포넌트에서 useCookie를 사용하면 된다.
쿠키 내부의 정보들을 접근하고 싶다면 . 을 이용하여 접근하면 된다.
const [cookies, setCookie, removeCookie] = useCookies(['userInfo'])
const onStart = () => {
if (!cookies.userInfo) {
alert('로그인 후 이용해주세요.')
} else {
router.push('/qna')
}
}