Jump to content
  • 0
Sign in to follow this  
g4rdi

.Net Core MVC ile Session Nasıl Oluşturulur?

Question

 Selam arkadaşlar,

Biliyorsunuz ki .NetFramework MVC ile session yapısını aşağıdaki gibi oluşturuyorduk;

Session["sessionAdi"] = nesne;

ancak .NetCore MVC ile bu şekilde maalesef session oluşturamıyoruz. Bunun en büyük sebebi ise .net core cross platform bir kütüphane olduğu için session içerisine göndereceğimiz nesne sadece string olmalı ya da object (nesne)'i Json'a çevirerek oluşturmamız gerekmektedir. Bu yüzden aşağıda .NetCore MVC ile session oluşturmayı detaylı olarak anlattım.

1.thumb.png.4147017016688396e57de13f8ce72258.png

2.thumb.png.01375ce635afc5a0c98bed37758e4a74.png

3.thumb.png.4cde2dfeb096a1fa5fa7f014888f99e5.png

projeyi oluşturduktan sonra Nuget Package Manager ile aşağıdaki paketi projeye dahil etmeliyiz.

Alıntı

install-package Microsoft.AspNetCore.Session

4.thumb.png.f53f1d2db85fe47577b7d997196b8cec.png

ardından Startup.cs içerisinde ConfigureServices isimli metot'a sessionı eklemeliyiz.

public void ConfigureServices(IServiceCollection services)
{            
    services.AddSession();
}

5.thumb.png.6ff7b4f7141c1f552ec97a0f62577219.png

alternatif olarak isterseniz session'a bir ömür de tanımlayabilirsiniz. Bunun için ise;

services.AddSession(options => {
        options.IdleTimeout = TimeSpan.FromMinutes(5);   
    });

yukarıdaki kodu dahil ettiğinizde oluşturulan session 5 dakika sonra kaldırılır.

6.thumb.png.503ae2545837d31222f6239e6e66061a.png

istersek oluşturmuş olduğumuz session'a aşağıdaki gibi bir isim ve ömür de tanımlayabiliriz. (Ben varsayılan olarak bunu kullancağım.)

services.AddSession(options => {
                options.Cookie.Name = "Örnek.Session";
                options.IdleTimeout = TimeSpan.FromMinutes(1);
                options.Cookie.IsEssential = true;

            });

7.thumb.png.4a900d36090303927ca9f2218f1b91f7.png

bu işlemlerin ardından oluşturmuş olduğumuz session'ı middleware'a tanımlıyoruz.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSession();
}

8.thumb.png.2a4faf1c88c86b0696aac5f1fa9722ce.png

Session tanımlama işlemlerinin ardından session içerisinde object gönderebilmek amacıyla "Helpers" isminde bir klasör ve içerisine "SessionHelper.cs" isminde bir class tanımlıyorum. Class içerisine ise aşağıdaki kodları yazıyorum.

using Microsoft.AspNetCore.Http;

public static class SessionHelper
{
    public static void SetObjectAsJson(this ISession session, string key, object value)
    {
        session.SetString(key, JsonConvert.SerializeObject(value));
    }

    public static T GetObjectFromJson<T>(this ISession session, string key)
    {
        var value = session.GetString(key);
        return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
    }
} 

9.thumb.png.10ade925ad045aff0982f8242c9dfb71.png

yukarıdaki görselde de gördüğünüz üzere Json kütüphanesine ihtiyacımız olduğu için yine package manager console ekranını açarak install-package Newtonsoft.Json komutu ile kütüphaneyi projeye dahil etmeliyiz.

10.thumb.png.32989c285391ff2a21ce13038b11c04d.png

kütüphaneyi class içerisinde using anahtar kelimesi ile çağırıyoruz...

11.thumb.png.a9f71cdd0dc441fe01dd5b9c2433b349.png

class içerisinde iki adet static metot tanımlı olduğunu görüyorsunuz. SetObjectAsJson isimli metot, gönderilen nesneyi Json'a çevirmek için kullanılacak T GetObjectFromJson<T> isimli metot ise Json olarak tanımlı olan nesneyi çağırmak için kullanılacak. Metotları detaylı olarak incelediğinizde ilk metot parametre olarak session, anahtar değer ve değerin kendisini parametre olarak aldıktan sonra gönderilen anahtar değere ait bir session oluşturarak değerin kendisini json olarak döndürmekte. İkinci metot ise ilk metot ile oluşturulan Json 'ı generic olarak belirtilen tipe döndürmekte. Oluşturmuş olduğumuz bu metotları kullanmak için Model içerisinde Employee.cs isminde bir nesne(class) tanımlıyorum.

12.thumb.png.66322856216903195cb51198cd845308.png

oluşturmuş olduğumuz Employee.cs isimli class'a ait bir controller oluşturuyorum. Bu controller içerisinde AddSession ve EmployeeSession isimlerinde iki adet IActionResult tanımlıyorum.

13.thumb.png.c0d846c53c86a3f414850b258f4ec9b7.png

AddSession isimli action yeni bir employee oluşturarak oluşturulan employee'i session içerisine gönderecek ardından EmployeeSession isimli action'a bir istekte bulunduğumuzda oluşturmuş olduğumuz session içerisindeki employee bilgilerini unboxing (kutudan dışarı çıkarma) işlemini gerçekleştirerek view'a gönderecek. 

14.thumb.png.589fc1e4b164feebcd4747bd9bd1397a.png

ve son olarak projeye start verdiğimizde session içerisindeki bilgiyi modelde görebiliriz.

15.thumb.png.a1f6d805f662da2a62b5252280ed1e48.png

takıldığınız yerde bu başlık altında sorabilirsiniz.

kolay gelsin...

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...