Session
: cookie๋ฅผ ์กฐ๊ธ ๋ ๊ฐ์ ํ ๋ฐฉ๋ฒ
์ฟ ํค์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์กฐํฉํด ์ธ์ ์ ๋ง๋ ๋ค
cookie๋ id๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ค๋ฃจ๊ธฐ์๋ ์ํํ๋ค → ๋ณด์ ๋ฌธ์
์ธ์ ์ ์๋ฒ๊ฐ ์ฟ ํค ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ด๋ ์ฟ ํค์ ๋ค๋ฅด๊ฒ ์ฌ์ฉ์์ ์๋ณ์ id ๊ฐ๋ง์ ์ ์ฅํ๋ค
→ ์ค์ ๋ฐ์ดํฐ๋ ์๋ฒ์ database์ ์ ์ฅ๋์ด ์๋ค
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๊ฐ id๋ฅผ ๊ฐ๊ณ ์๋ฒ์ ์ ์ํ ๋ ์๋ฒ๊ฐ ํด๋น id ๊ฐ์ ํด๋นํ๋ data๋ฅผ ์ฝ์ด์ ์ฌ์ฉํ๋ค
↓↓ ์ค์ ๋ก ์ธ์ ์ set-cookie์๋ connect.sid์ ๊ฐ๋ง ์๊ณ ์ฟ ํค์ set-cookie์๋ count์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค
๋ค์ ๋งํ๋ฉด session์ ํด๋ผ์ด์ธํธ์ ์ฌ์ฉ์์ id ๊ฐ๋ง ์ ์ฅํ๊ณ , cookie๋ ํด๋ผ์ด์ธํธ์ ์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค๊ณ ์๊ฐํ ์ ์๋ค
์ด์ session ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณผ ์ฐจ๋ก!
๋จผ์ express-session์ ์ค์นํด์ค๋ค
๊ทธ๋ฆฌ๊ณ ์ธ์ ์ ์ด์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค!
let session = require('express-session');
app.use(session({ // session
secret: 'rri4iutrp9wroiorej;', // ๋๋คํ ๊ฐ
resave: false,
saveUninitialized: true
}))
express ์ฌ์ฉ์ ์ ์ธํ ๋ถ๋ถ!
๊ทธ๋ฆฌ๊ณ ๋ค์์ผ๋ก ๊ฐ๋จ์ ์์ ๋ฅผ ๋ฑ๋ !
let express = require('express');
let session = require('express-session'); // session
let app = express();
app.use(session({ // session
secret: 'rri4iutrp9wroiorej;', // ๋๋คํ ๊ฐ
resave: false,
saveUninitialized: true
}))
app.get('/count', function(req, res){
if(req.session.count){ // count ๊ฐ์ด ์๋ค๋ฉด
req.session.count++; // 1 ์ฆ๊ฐ
}
else{ // count ๊ฐ์ด ์๋ค๋ฉด
req.session.count = 1; // 1๋ก ์ค์
}
res.send('count : '+ req.session.count);
})
app.get('/tmp', function(req, res){ // ๋ค๋ฅธ url๋ก ๋ค์ด๊ฐ๋ ํด๋ผ์ด์ธํธ์ id๊ฐ ๊ฐ์ผ๋ฉด ๊ฐ์ count ์ถ๋ ฅ
res.send('result : '+req.session.count);
})
app.listen(3003, function(){
console.log('Connected 3003 port!!!');
})
์ด ์ฌ์ง์ ๋ณด์ด๋ connect.sid๊ฐ req.session.count์ ์ฐ๊ฒฐ๋์๋ค!
์ด๋ express-session์ ๋ฉ๋ชจ๋ฆฌ์ data๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ฅผ ๋ค์ ๊ป๋ค ์ผ๋ฉด data๊ฐ ๋ชจ๋ ์ฌ๋ผ์ง๋ค!
๋์ถฉ ๋ก๊ทธ์ธ ์์ ์ฝ๋๋ฅผ ์ง๋ณด๋ฉฐ session์ ๋ํด ๋ ์ดํดํด๋ณด๊ธฐ!
๋จผ์ get ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ
app.get('/auth/login', function(req, res){
let output=`
<h1>Login</h1>
<form action="/auth/login" method="post">
<p>
<input type="text" name="username" placeholder="username">
</p>
<p>
<input type="password" name="password" placeholder="password">
</p>
<p>
<input type="submit">
</p>
</form>
`;
res.send(output);
})
์ด๋ ํผ ํ๊ทธ์ action์ ์ด์ฉํด์ ์ด๋ํ ํ์ด์ง์ ๋ฐฉ์์ ์ง์ ํด์ค๋ค
์ฐ๋ฆฌ๋ ๋ก๊ทธ์ธ์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ post ๋ฐฉ์์ผ๋ก ์ง์ ํด์ค ๊ฒ์ด๋ค
๊ทธ๋ฆฌ๊ณ post ๋ฐฉ์์ ์ฌ์ฉํ ๋๋ body๋ฅผ ์ด์ฉํด์ data๋ฅผ ๋ฐ์์์ผ ํ๊ธฐ ๋๋ฌธ์ bodyParser๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ฝ๋๋ฅผ ์ ๋ ฅํด์ค๋ค
let bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}))
๋ฐ๋~~ ๐งผ๐๐ธ๐ฉฒ๐ง๐
post ๋ฐฉ์ ๋ผ์ฐํธ!
app.post('/auth/login', function(req, res){
let user = { // ์ผ๋จ DB ๋์ ์ฌ์ฉ
username: 'pompompurin',
password: '111',
displayName: 'PomPomPuRin'
};
let uname = req.body.username;
let pwd = req.body.password;
if(uname === user.username && pwd === user.password){
req.session.displayName = user.displayName;
req.session.save(function() {
res.redirect('/welcome');
})
}
else{
res.send('There is no data <a href="/auth/login">login</a>');
}
})
์ผ๋จ DB ๋์ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด user์ ์ ๋ณด๋ฅผ ๋ด์์ค๋ค
์ฌ๊ธฐ์ displayName์ ์ ๋ ฅ๋ฐ๋ ๊ฒ์ด ์๋๋ผ ์๋ฒ์ ๋ด๊ฒจ์๋ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์!
์ ๋ณด๊ฐ ๋ง๋ค๋ฉด user.displayName์ ์ ๋ฌํด์ฃผ๊ณ /welcome ํ์ด์ง๋ก ์ด๋ํด์ค๋ค
์๋ ๊ฒฝ์ฐ ํ๋ ธ๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ฉฐ ๋ก๊ทธ์ธ ํ์ด์ง ํ๊ทธ๋ฅผ ๊ฑธ์ด์ค๋ค
๋ง์ ๊ฒฝ์ฐ /welcome ํ์ด์ง๋ก redirect ๋๋๋ฐ ์์ง ๋ผ์ฐํธ ํด์ฃผ์ง ์์์ ๊ทธ๊ฑด ์ด ๋ค์!
๋ค์์ welcome ํ์ด์ง
app.get('/welcome', function(req, res){
if(req.session.displayName){ // ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ ๊ฒฝ์ฐ
res.send(`
<h1>Hello, ${req.session.displayName}</h1>
<a href="/auth/logout">logout</a>
`);
}
else{ // ๋ก๊ทธ์ธ์ ์คํจํ ๊ฒฝ์ฐ
res.send(`
<h1>Welcome</h1>
<a href="/auth/login">Login</a>
`);
}
})
๋ง์ฝ URL์ ์ ๋ ฅํด์ ์ ๊ทผํ๋ค๊ณ ํ๋๋ผ๋ req.session์ ๊ฐ์ ์ ๋ฌด๋ก ๋ก๊ทธ์ธ ์ํ๋ฅผ ํ์ธํ๋ค
post ๋ฐฉ์์ผ๋ก ์ ๊ทผํ /auth/login์์ displayName์ ์ ๋๋ก ๋ฐ์์ค๋ฉด ๋ก๊ทธ์ธ๋ ์ํ, ๋ฐ์์ค์ง ๋ชปํ๋ค๋ฉด ๋ก๊ทธ์ธ๋์ง ์์ ์ํ์ด๊ธฐ ๋๋ฌธ!
๋ก๊ทธ์ธ์ด ๋ ์ํ๋ฉด displayName์ ๋ณด์ฌ์ฃผ๊ณ logout ์ด๋ ํ๊ทธ๋ ๊ฑธ์ด์ค๋ค ๋ก๊ทธ์์ ํ์ด์ง๋ ๋ค์ ์ด์ด์..
ํ์ง๋ง ๋ก๊ทธ์ธ์ด ๋์ง ์์ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ก๊ทธ์ธ ์ด๋ ํ๊ทธ๋ฅผ ๊ฑธ์ด์ค๋ค
๋ค์์ผ๋ก๋ ๋ก๊ทธ์์!
app.get('/auth/logout', function(req, res){
delete req.session.displayName;
req.session.save(function() {
res.redirect('/welcome');
})
})
์ด๋ ๊ฒ delete๋ฅผ ์ฌ์ฉํด์ ์ธ์
์ ์ง์์ฃผ๋ฉด ๋๋ค! ๋ก๊ทธ์์์ ๋๋ฅด๋ฉด ๋ค์ ๋ก๊ทธ์ธ์ด ์๋ ์ฐ์ปด ํ์ด์ง๋ก
File์ ์ธ์ ์ ์ ์ฅํ๋ ๋ฒ!
session-file-store ์ฌ์ฉ
let session = require('express-session'); // session
let FileStore = require('session-file-store')(session); // express-session์ ์์กด
app.use(session({ // session
secret: 'rri4iutrp9wroiorej;', // ๋๋คํ ๊ฐ
resave: false,
saveUninitialized: true,
store: new FileStore() // ์ถ๊ฐ
}))
session-file-store๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ฝ๋!
์คํ์์ผ๋ณด๋ฉด sessions๋ผ๋ ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋ ๊ฑธ ๋ณผ ์ ์๋ค
↓↓ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์์ด ๊ฐ์๊ธฐ ์๋ผ์ ๋จธ๋ฆฌ ๊ฝ๊ฝ ์ธ๋งจ ๋... ํน์ ์ด๊ฑฐ ํด๊ฒฐํ๋ ค๊ณ ์ค์ ๋ถ์ด ๊ณ์๋ค๋ฉด ์ ํ ๊ธ์ ์๋ซ๋ถ๋ถ์ ์ฝ์ด๋ณด์ธ์ ;ใ ;
์.. ๊ฐ! ์๊ธฐ... ๐จ
์ ์ค๋ฅ๋ ,,,
๊ทธ๋์ ํฐ๋ฏธ๋ ์ผฐ๋๋ฐ npm startํด๋ ์๋ผ์ ๋ฐฉ๋ฒ์ ์์์๋ค!
์จ์
package.json์ script ๋ถ๋ถ์
"scripts": {
"start": "supervisor ./app_session_file.js"
},
์๋ ๊ฒ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค!!
๊ทผ๋ฐ ๊ณ์ ๋ฐ๊ฟ์ค์ผ ํ๋ค.. ใ .ใ
์ด์ ๋ถํฐ ํฐ๋ฏธ๋ ์ฌ์ฉํด์ผ์ง
์๋ ๊ทธ๊ฒ๋ณด๋ค ๊ณ์ ์ค๋ฅ ๋๋ฉด์ crashing child๋ผ๊ณ ํ๋๋ ๊ฐ์๊ธฐ ๋๋ค..
์ด๊ฒ ๋ญ ๊ฒฝ์ฐ์ง???ใ ใ
ํน์๋ ํ๊ณ ์ฟ ํค ์ง์ฐ๊ณ ๋ค์ ํ๋๋ ๋ ์ค๋ฅ ์ค์ ์ฅ,,,
→ ์๊ณ ๋ณด๋๊น ์ธ์ ์ data๊ฐ ์ ์ฅ๋๊ฑฐ๋ ์ญ์ ๋๊ธฐ ์ ์ redirect๊ฐ ์คํ๋๋ฉด ์ค๋ฅ๊ฐ ๋ด๋ ๊ฒ์ ใ
์ ํด๊ฒฐํ๋ค
req.session.displayName์ user.session.displayName์ ์ฃผ๊ธฐ ์ ์ด๋, delete๊ฐ ์คํ๋๊ธฐ ์ ์ redirect๊ฐ ๋ ์๋ ์ผ์ด๋์ ์ ๋๋ก ์คํ์ด ์๋ ๊ฒ์ด์๋ค... ์
๊ฒฐ๊ตญ!
req.session.save(function() {
res.redirect('/welcome');
})
์ด๋ ๊ฒ ์ฝ๋ฐฑ ํจ์ ์์ redirect๋ฅผ ๋ฃ์ผ๋ฉด ์ ์คํ๋๋ค ;ใ ;
์ด๊ฑฐ ๋๋ฉ ํผ์ ๊ณ์ ๋จธ๋ฆฌ ๊ฝ๊ฝ ์ธ๋งธ๋๋ฐใ ใ
์์ ์ฝ๋ ๋ค ๊ณ ์ณ์ผ๊ฒ ๋ค
์๋ ์ ๊น๋ง..ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ
๋ ํผ์ ๋๋๊ฑฐ๋ฆฌ๋ฉด์ ํด๊ฒฐํ๋๋ฐ ๊ฐ์๊ธฐ MySQL ์ ์ฅ ๋ถ๋ถ์์ ์๋ ค์ฃผ์๋ค???
redirect์ ํ๊ธฐ ์ ์๋ ํญ!์! save๋ผ๋ ํจ์์ ์ฝ๋ฐฑ์ ์ฃผ์ด์ redirect๋ฅผ ํด์ค์ผ ํ๋ค
save๋ data-store์ ์ ์ฅ์ด ๋๋ฌ์ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋์ค์ ํธ์ถํด์ค๋ค...
๋๋ฌผ ์ค์ค ํ๋ฆฌ๋ฉด์... ๋ค์ ๊ฐ์๋ก...
๋๋์ด!! ๋๋ง์!!!
MySQL์ ์ธ์ ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ!! ๐ญ๐ณ๐ฅ
๋จผ์ express-mysql-session์ ์ค์นํด์ค๋๋ค
๊ทธ๋ฆฌ๊ณ express-mysql-session์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ฝ๋๋ฅผ ์จ์ค๋ค
let session = require('express-session'); // session
let MySQLStore = require('express-mysql-session')(session); // express-session์ ์์กด
app.use(session({ // session
secret: 'rri4iutrp9wroiorej;', // ๋๋คํ ๊ฐ
resave: false,
saveUninitialized: true,
store: new MySQLStore({ // ์ต์
ํ์
host: 'localhost',
port: 3306,
user: 'root',
password: '๋น๋ฒ',
database: 'o2'
})
}))
์ด๋ mysql์ ์ ๊ทผํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ๋ฐ ์ต์ ์ ์ ๋ณด๋ฅผ ๊ผญ ์ ์ด์ค์ผ ํ๋ค!
๊ทธ๋ฆฌ๊ณ app_session_mysql.js๋ฅผ ์คํ์ํค๋ฉด ์๋์ผ๋ก sessions๋ผ๋ table์ด ์๊ธด ๊ฒ์ ๋ณผ ์ ์๋ค
table์ ์๋ฌด data๋ ์์์ง๋ง ๋ฆฌ๋ก๋๋ฅผ ํด์ฃผ๋ฉด ์ด๋ ๊ฒ ์ฌ์ฉ์์ id๊ฐ ์ ์ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค
๋ก๊ทธ์ธ๊น์ง ํด์ฃผ๋ฉด displayName๋ ์ถ๊ฐ๋๋ค
์ ์ฌ๊ธฐ์ ์ง๊ณ ๋์ด๊ฐ ๋ถ๋ถ
redirect์ ํ๊ธฐ ์ ์๋ ํญ!์! save๋ผ๋ ํจ์์ ์ฝ๋ฐฑ์ ์ฃผ์ด์ redirect๋ฅผ ํด์ค์ผ ํ๋ค
save๋ data-store์ ์ ์ฅ์ด ๋๋ฌ์ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋์ค์ ํธ์ถํด์ค๋ค...
req.session.save(function() {
res.redirect('/welcome');
})
๋!!!
์ฌ๊ธฐ๊น์ง 4์๊ฐ ๊ฑธ๋ ธ๋ค... ใ .ใ
์ฝ์ง ์๋ค...
์ค๋ ๊ฐ์ ์ฌ๋ฐ์๋๋ฐ ์ค๊ฐ์ ๊ฐ์๊ธฐ redirect๋๋ฉ ์๊ฐ ์์๋ถ์๋๋ ์ง์ณค๋ค...
์ผ๋ฅธ ์ ๋ฆฌํ๊ณ ํ ์ต ๊ณต๋ถํด์ผ์ง ;ใ ;
'c o d i n g . . ๐ > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Nodejs + DB ํ๊ธฐ (0) | 2022.06.19 |
---|---|
[์ํ์ฝ๋ฉ] NodeJs ํ์ฉํ๊ธฐ(1) (0) | 2021.08.02 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(4) (0) | 2021.07.12 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(3) (0) | 2021.07.12 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(2) (0) | 2021.07.12 |