Node.js session Yönetimi

Yazıda session hakkında bilgi verildikten sonra express ile session yönetimi ve kullanımı ile ilgili bilgiler yer almaktadır.

Session veya oturum çerezlerin özel bir türüdür.

Çerezleri kullanarak kullanıcıya ait çeşitli bilgilerin saklanmasını sağlayabiliyorduk.

Ancak çerezler kullanıcı tarayıcısında saklandığı için içeriği kolayca okunabilmektedir.

Session yönetiminde kullanıcı bir session başlattığında kullanıcı için benzersiz bir kimlik belirlenerek sunucuda bilgilerin saklanması sağlanır.

Oluşturulan benzersiz kimlik numarası kullanıcının tarayıcısında çerez olarak saklanır.

Benzersiz kimlik bilgisini taşıyan çerezin ömrü tarayıcının kapatılacağı zamana kadar ayarlanır.

Kullanıcı sunucuda bulunan bilgilere çerez içerisinde bulunan benzersiz kimlik ile erişir.

Tarayıcı kapatıldığında kullanıcı tarayıcısında bulunan benzersiz kimlik numarasını taşıyan çerez silinir.

Böylece sunucuda bulunan bilgiler erişilemez hale gelir.

Express modülü için hazırlanmış session yönetimini sağlayan express-session orta katmanını kullanarak session yönetimini sağlayabiliriz.

Modülü indirmek için

npm install express-session --save

komutu kullanılır.

Modül projeye dahil edilir ve express orta katmanına eklenerek kullanılır.

'use strict';

const express = require('express');
const app = express();
const session = require('express-session');

app.use(session({
  secret: 'Özel-Anahtar',
  resave: false,
  saveUninitialized: true
}));

app.get('/', function (req, res) {
  res.send('Merhaba Node.js');
});

app.listen(1453, function () {
  console.log('Sunucu çalışıyor...');
});

Modülünü kullanabilmek için secret, resave ve saveUninitialized ayarlarının parametre olarak geçirilmesi gerekir.

Sunucuda saklanan session bilgileri Ram bellekte tutulur.

Fazla session kullanımı veya beklenmeyen ram hataları için parametre olarak store değeri ve session bilgilerinin saklanacağı ortam için hazırlanan modül (Redis, Memcached, Oracle vb.) değerinin yazılması gerekir.

'use strict';

const express = require('express');
const app = express();
const session = require('express-session');
const RedisStore = require('connect-redis')(session);

app.use(session({
  store: new RedisStore(redisSecenekleri),
  secret: 'Özel-Anahtar',
  resave: false,
  saveUninitialized: true
}));

Session oluşturmak için req.session.sessionAdi kullanılır.

'use strict';

const express = require('express');
const app = express();
const session = require('express-session');

app.use(session({
  secret: 'Özel-Anahtar',
  resave: false,
  saveUninitialized: true
}));

app.get('/', function (req, res) {

  req.session.adiSoyadi = 'Yusuf SEZER';
  res.send('Session oluşturuldu.');

});

app.get('/oku', function (req, res) {

  if (req.session.adiSoyadi) return res.send('Session bilgileri: ' + req.session.adiSoyadi);

  res.send('Session bulunamadı.');

});

app.listen(1453, function () {
  console.log('Sunucu çalışıyor...');
});

Oluşturulan sessionları silmek için req.session.destroy metodu kullanılır.

'use strict';

const express = require('express');
const app = express();
const session = require('express-session');

app.use(session({
  secret: 'Özel-Anahtar',
  resave: false,
  saveUninitialized: true
}));

app.get('/', function (req, res) {

  req.session.adiSoyadi = 'Yusuf SEZER';
  res.send('Session oluşturuldu.');

});

app.get('/oku', function (req, res) {

  if (req.session.adiSoyadi) return res.send('Session bilgileri: ' + req.session.adiSoyadi);

  res.send('Session bulunamadı');

});

app.get('/sil', function (req, res) {

  req.session.destroy();
  res.end();

});

app.listen(1453, function () {
  console.log('Sunucu çalışıyor...');
});

Aşağıda session kullanarak hazırlanmış sayfa görüntüleme uygulaması yer almaktadır.

'use strict';

const express = require('express');
const app = express();
const session = require('express-session');

app.use(session({
  secret: 'Özel-Anahtar',
  resave: false,
  saveUninitialized: true
}));

app.get('/', function (req, res) {

  if (req.session.goruntulenme) {

    req.session.goruntulenme++;

  } else {

    req.session.goruntulenme = 1;

  }

  res.send('Sayfa ' + req.session.goruntulenme + ' defa görüntülendi.');

});

app.listen(1453, function () {
  console.log('Sunucu çalışıyor...');
});

Session yöntemi Cookie yöntemine göre daha güvenlidir.

Ancak veriler Ram bellekte tutulduğu için çeşitli sorunlar oluşabilir.

Bu sorunların önüne geçmek için çeşitli veritabanı uygulamaları kullanılabilir.

Ayrıca token gibi özel güvenlik önlemlerini almak faydalı olacaktır.

Node.js Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!