-
๐ค ์ธ์ (Session) | ์ธ์ ์ ๊ฐ๋ , sessionStorage์ LocalStorageAuthentication(์ธ์ฆ) 2020. 11. 22. 05:13
์ธ์ ์ด๋ ๋ฌด์์ผ๊น?
์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋ ์ํ๋ฅผ ์ธ์ ์ด๋ผ๊ณ ํ๋ค.
๐ ์ธ์ ์ ํน์ง
1. ์๋ฒ์ธก์์ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ฅผ ํ์ธํ๋ค.
2. ๋ง์ฝ ์ฒ์ ๋ง๋๋ ๋ธ๋ผ์ฐ์ ์ผ ๊ฒฝ์ฐ ์ ์ผํ ID๋ฅผ ๋ถ์ฌํ ํ์ ๊ทธ๊ฒ์ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋๋ค.
let token = SHA256(credential.username).toString(); //sessionid๋ผ๋ใํ ํฐ์ดใ์๊ธฐ๋ฉดใ์ด๊ฒ์ใsession์ใ๋ฃ๋๋ค๏ผใ // SESSIONS.push(`session_id=${token}`); SESSIONS.push(token) // console.log(SESSIONS); response.writeHead(200, { 'set-cookie' : `session_id=${token}` })
3. ์ผ๋ฐ์ ์ผ๋ก ์ด ์ ์ผํ ํด๋ผ์ด์ธํธ ID๊ฐ ์๋ฒ์์ ์กด์ฌํ๋ ์ํฉ์ Session์ด๋ผ๊ณ ํ๋ค.
-> ๋ธ๋ผ์ฐ์ ๋ฅผ ์ผ๊ณ ์์๋๋ง ์ฐ๊ฒฐ์ด ๋๋ค.4. ๊ฐ ํด๋ผ์ด์ธํธ ID์ Session ๊ฐ์ฒด๋ง๋ค Data๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
-> session๊ฐ์ฒด์ ์ด ํด๋ผ์ด์ธํธ๋ ์ธ์ ์ ์์ ํ์๋์ง ๋ฑ ํด๋ผ์ด์ธํธ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ฃ์ ์๋ ์๋ค.ex) xxx๋์ด 3์ด ์ ์ ์ ์ํ์ต๋๋ค.
5. ์ฟ ํค์ ๋ค๋ฅด๊ฒ ์ธ์ ์ ์๋ฒ ์ธก์์ ๋ณด์์ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์์ ํ๋ค.
์ธ์ ์คํ ๋ฆฌ์ง(sessionStorage) VS ๋ก์ปฌ ์คํ ๋ฆฌ์ง(localStorage)
์ธ์ ์คํ ๋ฆฌ์ง์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ HTML5์์ ์ถ๊ฐ๋ ์ ์ฅ์์ด๋ค. ํค์ ๊ฐ์ผ๋ก ์ ๋ณด๋ฅผ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ ์ ์๋ค. ํด๋ผ์ด์ธํธ ์ธก์์ ์ ์ฅ๋๋ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋ณด์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ ์ฅํ๋ฉด ์ ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ์ธ์ ์คํ ๋ฆฌ์ง์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค. ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ์ ์ ์งํ์๊ณ , ์ธ์ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ์ ์ง ๊ธฐ๋ฅ์ ๊ตฌํํ์๋ค.
๐ ์ธ์ ์คํ ๋ฆฌ์ง
์ธ์ ์คํ ๋ฆฌ์ง๋ ๋ธ๋ผ์ฐ์ ํญ์ ๋ซ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค. ๊ทธ๋์ ์ผํ์ฑ ๋ก๊ทธ์ธ ๋ฑ ์ ๊น ์ ๋ณด๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉํ ์ ์๋ ์ ์ฅ์์ด๋ค.
๐ ์ธ์ ์คํ ๋ฆฌ์ง๋ก ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ ๊ตฌํํ๊ธฐ
์ค์ ํ๋ก์ ํธ์์ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
1. ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋ฒ๋ก ์์ฒญ์ด ๊ฐ๋ค.
2. ์๋ฒ์์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ํ์ธํ ํ, ๋ก๊ทธ์ธ์ด ๋ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๋ก db์ ์ ์ฅ๋ ๊ณ ์ id๊ฐ์ ๋ณด๋ด์ค๋ค. (1,2,3,...๋ฑ)
3. ํด๋ผ์ด์ธํธ ์ธก์์๋ ์๋ต์ ๋ฐ๊ณ , ๋ฐ์ id๊ฐ์ sessionStorage์ ๋ฃ์ด์ค๋ค.
window.sessionStorage.setItem("id", response.id);
4. ๋ค๋ฅธ ํ์ด์ง๋ก ๋ผ์ฐํ ์ด ๋ ๋ sessionStorage์ id๊ฐ์ด ์๋์ง๋ฅผ ํ์ธํ์ฌ ๋ก๊ทธ์ธ์ ์ ์งํ์๋ค. ๋ง์ฝ id๊ฐ์ด ์์ ๊ฒฝ์ฐ์๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๊ฐ๋๋ก ๋ผ์ฐํ ์ ํ์๋ค.
<Route exact path="/home" render={() => { if (window.sessionStorage.getItem("id")) { return <Home /> } else{ return <Redirect to="/signin" /> } }}/>
5. ๋ก๊ทธ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด sessionStorage์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋๋ก ํ์๋ค.
window.sessionStorage.clear();
๐ ๋ก์ปฌ ์คํ ๋ฆฌ์ง
๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋ฐ์ดํฐ๋ ์ฌ์ฉ์๊ฐ ์ง์ฐ์ง ์๋ ์ด์ ๊ณ์ ๋ธ๋ผ์ฐ์ ์ ๋จ์์๋ค.
๐ ์๋ on, off ์ฌ๋ถ ์ ์ฅํ๊ธฐ
์๋ ์ญ์ ํ๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ์ฌ์ฉ์๊ฐ ์ค์ ํ ์๋์ on, off ์ฌ๋ถ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค. sessionStorage๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ก๊ทธ์์ ํ ๋ค์ ๋ก๊ทธ์ธ์ ํ์ ๋ on, off์ฌ๋ถ๊ฐ ๋ฐ์๋์ง ์๋๋ค๋ ๋ฌธ์ ์ ์ด ์์๋ค.
๊ทธ๋์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์๋์ ๊ฐ์ด ์๋๋ฆฌ์คํธ์ ๊ณ ์ id๊ฐ๊ณผ on,off ์ฌ๋ถ๋ฅผ key์ value๋ก ์ ์ฅํ์ฌ์ ๊ด๋ฆฌํ์๋ค. ์๋ ํธ๋ค๋ฌ๋ฅผ ๋ง๋ค์ด์ on,off ๋ฒํผ์ ํด๋ฆญํ ๋๋ง๋ค ์๋๋๋๋ก ํ์๋ค.
alarm_onHandler(id, checked) { window.localStorage.setItem(id, checked); }
๊ทธ๋ฆฌ๊ณ ์๋์ ์์ ์ญ์ ํ์ ๋, localStorage์์ ์ง์์ง๋๋ก ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด์ฃผ์๋ค.
window.localStorage.removeItem(e.target.value);
์ธ์ ์คํ ๋ฆฌ์ง๋ก ๋ก๊ทธ์ธ์ ์ ์งํ์ ๊ฒฝ์ฐ ์๊ธฐ๋ ๋ณด์์์ ๋ฌธ์ ์ ์ ๋ํด์๋ ์ข ๋ ์ฐพ์๋ณด์์ผ๊ฒ ๋ค.
'Authentication(์ธ์ฆ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ช ์ฟ ํค | ์ฟ ํค๋ก ์ธ์ฆ ๊ตฌํํ๊ธฐ (0) 2020.11.22