~์ด์ ์ด์ผ๊ธฐ~
์ธ์
์ผ๋ก ๋๋ฐ ๊นจ์ง๊ณ ๋ฉํ ๋๊ฐ๊ณ ์ํผ ๊ทธ๋ฌ์
โ ๏ธ ํด๊ฒฐ ํ ๊ธฐ์ต์ ์์กดํด์ ์ฐ๋ ๊ธ
session.touch()
req.session.touch()๋ express-session ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋์
๋๋ค. ์ด ๋ฉ์๋๋ ์ธ์
์ lastAccess ์๊ฐ์ ํ์ฌ ์๊ฐ์ผ๋ก ์
๋ฐ์ดํธํ์ฌ ์ธ์
์ ๋ง๋ฃ ์๊ฐ์ ์ฐ์ฅํฉ๋๋ค.
์ธ์
์ ์ผ์ ์๊ฐ๋์ ์ฌ์ฉ๋์ง ์์ผ๋ฉด ๋ง๋ฃ๋๋๋ฐ, touch() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ํ๋์ ๊ณ์ํ๊ณ ์๋ ๋์์๋ ์ธ์
์ ์ ์งํ ์ ์์ต๋๋ค. ์ด๋ ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๊ฐ ์ผ์ ์๊ฐ๋์ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๊ณ ์๋ ๊ฒฝ์ฐ์๋ ์ธ์
์ด ๋ง๋ฃ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋๋ฐ ์ ์ฉํฉ๋๋ค.
๋ฐ๋ผ์ req.session.touch()๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์ ํ๋์ ๋ฐ๋ผ ์ธ์
๋ง๋ฃ ์๊ฐ์ ๋์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ ์น ์ฑ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
๋์๋ ๊ตฌ๊ธ๋ง ์ง์ฅ์์ ์ด์ ์ฑgpt์ง์ฅ์ผ๋ก ๊ฑธ์ด๋ค์ด์๋ค. touch()
๋ฉ์๋๊ฐ ์๋ ๊ฒ์ ์์์ง๋ง ํ์๊ฐ ์๋ ๊ฒ์ผ๋ก ์์๋จ ๋ง์...? ํ์ง๋ง ์ด๊ฒ ์ด๋ฐ๊ฒ ์๋์ touch()
๊น์ง ์ฌ์ฉ์ ํด๋ณด๊ธฐ๋ก ํจ.
req.session.cookie.maxAge = 300000;
req.session.touch();
res
.setHeader(
'Set-Cookie',
'connect.sid=s%3A' + req.sessionID + '; Max-Age=3600000;',
)
.json({
success: true,
message: SUCCESS_MESSAGE.SESSION_EXTENDS,
expiredTime: req.session.cookie.expires.getTime(),
});
์ ์ง๊ธ ๋ณด๋ ์ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ... req.session.cookie.maxAge = 300000;
์ด๊ฑฐ๋ req.session.touch();
์ด๊ฑฐ๋ ์ญํ ์ ๊ฐ์ต๋๋ค. (๋ฉํ์ด ์ข ๋๊ฐ์์๋๋ฏ...)
์๋ฌดํผ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด๋ณธ ๊ฒฐ๊ณผ!
์ด ๋๋ ์ฌ์ฐจํ๋ฉด ์๋ก ๋ง๋ค์ด์ง ์ฟ ํค๋ก ์ธ์
์ ๋ฐ๊ฟ์น๊ธฐ๋ฅผ ํ ๊น ๊ณ ๋ฏผ์ ํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ์ต์ด์ ์ฟ ํค์ ๋ด๊ฐ setHeader
๋ก ์๋ก ๋ง๋ ์ฟ ํค ๋ ๊ฐ๊ฐ ํ์ธ์ด ๋๋ค.
์ค์ํ ๊ฒ์ ์ ๊ธฐ Expires
๋ถ๋ถ์ด๋ค. (๋ง๋ฃ ์๊ฐ์ด 3์ 20์ผ์ธ๊ฑด ์์ง?... ์๊ฐ๋ง ๋ด๊ฐ์ง๊ณ ๊ทธ ๋ ๋์น์ฑ์ง ๋ชปํ๋๋ฐ ์ผ๋จ ์ด๊ฑด ๋์ด๊ฐ๋๋ก ํ์...)
์ด ์ํฉ์์ ํ ๋ฒ ๋ ์ฐ์ฅ์ ๋๋ฅด๋ฉด
๊ธฐ์กด ์ฟ ํค ๋ง๋ฃ ์๊ฐ์ ์ฌ์ ํ ๋ณํจ์ด ์์ง๋ง ์๋ก ๋ง๋ค์ด์ง ์ฟ ํค์ ๋ง๋ฃ ์๊ฐ์ ๋ณํ๋ค!! ๊ทธ๊ฒ๋ ์์ฃผ ์!!! ์!! ํ์ง๋ง... ์ ๊ธฐ์กด์ ์ธ์ ์ ๊ฑด๋๋ฆฌ์ง ๋ชปํ๋ ๊ฑธ๊น... ์ฌ์ ํ ์ ์ ์์๋ค.
๊ทธ๋ฌ๋ ์ค ๋ฌธ๋ ์๊ฐ๋ session.save()
๋ฉ์๋...! ์ด๋ฐ ์ธ์
์์ฑ ๋ ์ด ๋ฉ์๋ ๋๋ฌธ์ ์๊พธ๋ง ์ธ์
์ด ๋ ๊ฐ๊ฐ ์๊ฒจ์ ๊ณ ์ํ๋ ๊ธฐ์ต์ด ์ค์ณ์ง๋๊ฐ๋ฉด์ ํน์...? ์ด ์น๊ตฌ๊ฐ ์ฌ๊ธฐ์์ ๋ ๊ตฌ์ํด์ค๊น...? ํ๋ ์๊ฐ์ด ๋ค์๋ค.
req.session.cookie.maxAge = 300000;
req.session.touch();
req.session.save()
res
.setHeader(
'Set-Cookie',
'connect.sid=s%3A' + req.sessionID + '; Max-Age=3600000;',
)
.json({
success: true,
message: SUCCESS_MESSAGE.SESSION_EXTENDS,
expiredTime: req.session.cookie.expires.getTime(),
});
๊ทธ ๊ฒฐ๊ณผ ํ๋ฉด์ด๋ค.
์ฌ์ ํ ์ฟ ํค๊ฐ ๋ ๊ฐ ์๊ธฐ๋ ๊ฒ์ ๋ฌธ์ ์ด๋ค. ํ์ง๋ง! ์ต์ด ์ฟ ํค์ ๋ง๋ฃ ์๊ฐ์ ๋ด๋ณด์!
์ด ์ํฉ์์ ๋ค์ ํ ๋ฒ ์ฐ์ฅ์ ๋๋ฅด๋ฉด!!
์ง !!!! ์๊ฐ์ด ๋ฐ๋์๋ค!!! ์ด์ ์ต์ด์ ์ฟ ํค๋ ์๊ฐ์ด ์ฐ์ฅ์ด ๋๋ ๊ฒ์ด๋ค!! ์์ฐ!!!
res.setHeader
๋ง ์ง์์ฃผ๋ฉด ์๋ก์ด ์ฟ ํค๊ฐ ์์ฑ๋ ์ผ๋ ์๊ณ , ์ฐ๋ฆฌ๋ ์ธ์
์ฐ์ฅ์ ๋ฌด์ฌํ ์ธ ์ ์๋ ๊ฒ์ด๋ค!! ํํํ!!
๊ณ์ ๊ถ๊ธํ๋ ๊ฑด ์๋ก ์๊ธด ์ฟ ํค์ /api/account
๋ผ๋ path
๊ฐ ์ ์๊ธฐ๋ ๊ฑธ๊น์๋ค. ์ด๊ฒ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๊ทธ๋์ ์ธ์
๊ฒฝ๋ก์ ์ถ๊ฐ๋ฅผ ํด์ฃผ์๋ค.
path
์ถ๊ฐ
cookie: {
sameSite: 'lax',
secure: false,
httpOnly: true,
maxAge: 1000 * 60 * 5,
path: '/api/account',
},
์ง์~ ๋ง๋ฃ ์๊ฐ๋ ์ ๋ฐ๋๊ณ ~ ์ฟ ํค๊ฐ ๋ ๊ฐ ์๊ธฐ๋ ์ผ ๋ฐ์๋ ๋ฐ์ํ์ง ์๋๋ต๋๋ค!!
์ด๋ ๊ฒ ๋!!!
์ธ์ค ์์๋ค๋ฉด ํฐ ์ค์ฐ์.
ํน์๋... ํ๋ ์๊ฐ์ผ๋ก ๊ธ์ฐ๊ธฐ ํ ์คํธ๋ฅผ ํด๋ดค์. ๊ทธ๋ฌ๋๋...
์~ ์์ฑ ์คํจ์ผ~
์ธ์
์ ๋ด๊ธด admin_name
์ด ์ ์๋์ง ์์ ์ํ๋ผ ์ฝ์ ์ ์๋ค๋ ์ด์ผ๊ธฐ๋ค. ์ด์ฐฝ๊ธฐ์ ๋ง์ด ๋ฐ์ํ๋ ์๋ฌ์๋ค. ์ผ์ผ... ์๋ง ์ฝ์ด์ค๋ ๋
์์ด ์๊ทธ๋ ๊ฐ์๊ธฐ... ๋ ์ฌํผ...
๋ค์ ์๊ฒจ๋ ์๊ฐ์ง๋ ๋ชปํ ์๋ฌ์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ์ ๋ํ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง ๋ก๊ทธ์ธ ๋ฐฉ์์ ์ฐธ๊ณ ํ๋ ์ค ์ด ๋ธ๋ก๊ทธ์์ ๋ ์ค๋ฅธ ์๊ฐ์ด ์์๋ค.
๋ ์... ๋ฐ๋ก ์ ์ฅํ ์๊ฐ์ ์ฌ๊ธฐ์์ ์ ํ๊ณ ์์๋ ๊ฑธ๊น...? ๋ค๋ฅธ๋ฐ์ ์๋ง ์ ์ฅํ์์ผ๋ฉด์...? ๊ทธ๋์ ๋ค๊ธํ๊ฒ data
๋ณ์์ ์ธ์
์ ๋ณด๋ฅผ ๋ด์ ์ฝ๋๋ฅผ ์์ฑํด๋ดค๋ค.
๊ทธ๋ฌ๋๋ ๊ฒฐ๊ณผ๋!
const data = req.session;
if (!data.admin_name) {
console.log('NO SESSION DATA');
return res.status(401).json({ message: ERROR_MESSAGE.NO_LOGIN });
}
// data.touch()๋ ์ค๋ณต์ธ ๊ฒ ๊ฐ๊ณ ์์ฆ์ ๊ฑฐ์ ์ฐ์ด์ง ์๋๋ค๊ณ ํ์ฌ ์๋ต
data.resetMaxAge();
data.save();
res.json({
success: true,
message: SUCCESS_MESSAGE.SESSION_EXTENDS,
expiredTime: req.session.cookie.expires.getTime(),
});
์ฌ์ ํ ๊ฐ์์. ํ์ง๋ง ๊ทธ๋๋ ๋๋ธ req.session
์ ๋์ง๋ ๊ฒ๋ณด๋ค ๊ธฐ์กด ์ฝ๋์ ํต์ผ์ฑ๋ ์๊ณ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์๋ค.
๊ณ์ํด์ ์๊ฐํ๋ ์ค... ํน์ ์ฟ ํค์ ์ค path
๊ฐ ๋ฌธ์ ์ธ ๊ฒ์ ์๋๊น? ํ๋ ์๊ฐ์ด ๋ค์๋ค.
์ฟ ํค์ 'Path' ์ต์
์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค๋ฅผ ์๋ฒ์ ์ ์กํด์ผ ํ๋ URL์ ์ง์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 'Path=/books'๋ก ์ค์ ํ๋ฉด, ์ด ์ฟ ํค๋ ์น ์ฌ์ดํธ์ '/books' ๋๋ ํ ๋ฆฌ ์๋์ ์๋ ๋ชจ๋ ํ์ด์ง์์ ์ ์ก๋ฉ๋๋ค. ๋ฐ๋ฉด, 'Path=/'๋ก ์ค์ ํ๋ฉด, ์น ์ฌ์ดํธ์ ๋ชจ๋ ํ์ด์ง์์ ์ฟ ํค๊ฐ ์ ์ก๋ฉ๋๋ค.
์ด Path ์ต์
์ ์ฟ ํค์ ๋ฒ์๋ฅผ ์ ํํ๋ฏ๋ก, ์น ์ฌ์ดํธ ๋ด์์ ํน์ ๋ถ๋ถ๋ง ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณด์๊ณผ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๋๋ชจํ ์ ์์ต๋๋ค.
์ฝ๋์์๋ ์ด Path ์ต์
์ ๋ฐ๋ผ ์ฟ ํค์ ์ ๊ทผ์ฑ์ด ๊ฒฐ์ ๋ฉ๋๋ค. ํน์ ๋๋ ํ ๋ฆฌ์ ๋ํ ์ฟ ํค ์ ๊ทผ์ ์ ํํ๊ฑฐ๋, ์ ์ฒด ์น์ฌ์ดํธ์ ๋ํ ์ฟ ํค ์ ๊ทผ์ ํ์ฉํ๋ ๋ฑ์ ์กฐ์์ด ๊ฐ๋ฅํด์ง๋๋ค. ๋ฐ๋ผ์, ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ ๋ฐฉ์๊ณผ ๋ณด์ ์์ค์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๊ฒ ๋ฉ๋๋ค.
๋คผํผ์ ์น์ ํ ์ค๋ช
... ์๋๋ ๊ณต์ ๋ฌธ์๋ฅผ ์์ฃผ ์ฝ๋ ํธ์ด๊ณ , ์ด๋ฒ ์ธ์
๊ด๋ จํ ์ด์๊ฐ ๊ต์ฅํ ๋ง์๊ธฐ ๋๋ฌธ์ ๊ณต์๋ฌธ์๋ผ๋ฉด ์ด๊ณจ์ด ๋ ์ํฉ์ด๋ผ ๋
๋ค gpt์๊ฒ ์ง๋ฌธ์ ๊ฐ๊ฒผ๋ค. ๊ทธ๋ฌ๋๋ path
์ ์ญํ ์ ๋ํด์ ์ด๋ ๊ฒ ์ค๋ช
์ ํด์ค.
๊ทธ๋ฌ๋๊น, ๋ด ์ค๋ฅ๋ ๋น์ฐํ ๊ฑฐ์๋ค. /api/account
๋ผ๋ path
๋ฅผ ์ฃผ์์ผ๋ ๋น์ฐํ account ๋ด์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ฟ ํค๊ฐ ๋์ด๋ฒ๋ ธ๋ ๊ฒ์ด์๋ค.
์์์ '์ ์๋ก ๋ง๋ค์ด์ง ์ฟ ํค์ path๊ฐ ์๊ธฐ๋ ๊ฑธ๊น?'ํ๋ ์๋ฌธ๋ ํ๋ฆฌ๊ณ ๋ด๊ฐ ์๋ชป ์ฌ์ฉํ๊ณ ์์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
๊ทธ๋์ ๋ค์ ๋ฐ๊พผ ์ฟ ํค ์ค์ ์ ์ด๋ ๋ค. ์๋๋ ๊ธฐ๋ณธ path์์ง๋ง ์ฝ๊ฐ์ผ ์ ๊ทผ ์ ํ์ ์ค๋ดค์.
cookie: {
sameSite: 'lax',
secure: false,
httpOnly: true,
maxAge: 1000 * 60 * 5,
path: '/api',
},
๊ฒ์๋ฌผ ์ ๋ก๋ ์ฑ๊ณต์ด์ง์ ^~^ ๋ฌผ๋ก ์ฟ ํค ๋ง๋ฃ ์ฐ์ฅ๋ ์ ๋๋ค.
์ด๋ ๊ฒ... ์ ๋ง ๊ธธ๊ณ ๊ธธ์๋ ์ธ์
๊ณผ์ ์ธ์์ด ๋ง์ ๋ด๋ฆฌ๋ ๊ฒ ๊ฐ๋ค.
ํ... ์ง๊ธ๊ป ์ฑ๊ณต์ด๋ค! ์๊ฐํ๋ฉด ๊ณ์ํด์ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ํฐ์ง๊ณค ํ๋๋ฐ ใ
ใ
ใ
๊ธ๋ก ์ ์ด๋ฌ์ผ์ง! ํ๊ณ ์ ์ฌํ ๋ชป ์ ๊ณ ์๋ค.
์ด๋ฒ์ ํ ์คํธ ํ๋ฉด์ ์บก์ณํ ์ฌ์ง๋ค ํธํ๊ฒ ๋ณผ๊ฒธ ํด์ ๋ฒจ๋ก๊ทธ์ ์ฌ์ง์ ์ฌ๋ฆฌ๋ค๋ณด๋... ์ด๋ ๊ฒ ๋ฐ๋ก ์ฌ๋ฆด ์ ์๊ฒ ๋จ. ์ ํ~^^ ์ฐํด ์ ์ ํด๊ฒฐํด์ ์ ๋ง ๊ธฐ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ์ ๋ ๋ง์ด์ผ ๋...
๋ง์๊ฐ์์ ์ด๋ ์ง๋ง ์ ๋ ๋์ค์ ๊ณ์ ๋ณด๊ฒ์ฃ ?... ์ธ์์ด๋.
๊ทธ๋๋ ์ด๋ฒ์ ์ธ์ ๋ก๊ทธ์ธ ์งํํ๋ฉด์ ์ง์ง ๋ง์ด ๋ฐฐ์ด ๊ฒ ๊ฐ๋ค... ํํ... ๋์ด์ ๋ฌธ์ ์๊ธธ...