جستجو در دورآموز

خانه / وبگاه / استفاده از Session در Asp.net Core
415 برگشت

استفاده از Session در Asp.net Core

رامین اسلامی
رامین اسلامی

مدیر وب سایت دورآموز ،مدیر پروژه تیم برنامه نویسی جی وب ، برنامه نویس و مدرس زبان های برنامه نویسی و گرافیک

جمعه، 01 آذر 1398 ساعت 17:27:49
استفاده از Session در Asp.net Core

استفاده از Session در Asp.net Core

اگر شما با Asp.net Core طراحی وب سایت را انجام میدهید، متوجه خواهید شد که جلسات به همان شیوه ای که مورد استفاده قرار می گیرند کار نمی کنند. در اینجا چگونگی راه اندازی session (جلسات) را ارائه می دهیم

 

اضافه کردن جلسه با بسته NuGet

با استفاده از  NuGet  بسته Microsoft.AspNetCore.Session را به پروژه خود اضافه کنید.

Update startup.cs

حالا که ما بسته nuget را نصب کردیم، می توانیم جلسات را به ASP.NET اضافه کنیم.

درون فایل startup.cs کدهای زیر را اضافه کنید


services.AddDistributedMemoryCache(); // Adds a default in-memory implementation of 

services.AddSession()

 

درادامه ، ASP.NET Core را برای استفاده از حافظه پنهان برای ذخیره داده های جلسه پیکربندی می کنیم

 

 

متغیر جلسه کجا رفته است؟

 اکنون می توانید شی جلسه را با استفاده از HttpContext.Session پیدا کنید.

اگر شما در یک کنترلر نیستید، با تزریق IHttpContextAccessor، هنوز می توانید به HttpContext دسترسی داشته باشید.

بیایید پیش برویم و جلساتمان را به کنترل کننده اصلی مان اضافه کنیم:

using Microsoft.AspNetCore.Http; // in code jajhate estefade as method haye session elzamist
 
public class HomeController : Controller
{
    public IActionResult Index()
    { 
        HttpContext.Session.SetString("Test", "Ramin Eslami!");
        return View();
    }
 
    public IActionResult About()
    {
        ViewBag.Message = HttpContext.Session.GetString("Test");
 
        return View();
    }
}


شما می توانید در  اکشن های Index و About یکی از روش های Set  برای ذخیره اطلاعات و یکی از روش های Get  برای بازیابی آن مشاهده کنید.

استفاده از Session درون یک Class

فرض کنید یک کلاس فرضی داریم و میخواهیم از جلسه ذخیره شده در یک متد در متد دیگر استفاده کنیم، کد آن به صورت زیر خواهد بود .

public class SomeOtherClass
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    private ISession _session => _httpContextAccessor.HttpContext.Session;
 
    public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }
 
    public void TestSet()
    {
        _session.SetString("Test", "Ramin Eslami!");
    }
 
    public void TestGet()
    {
        var message = _session.GetString("Test");
    }
}

 

چگونه یک مدل را ذخیره کنیم؟

در اینجا از یک  افزونه ذخیره سازی سریع JSON  که امکان ذخیره سازی اجرای پیچیده را می دهد ، استفاده میکیم.

میتوانید کد زیر را کپی گرفته و به صورت یک کلاس در پروژه خود استفاده کنید

public static class SessionExtensions
{
    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);
    }
}

اکنون جهت ذخیره یک مدل درون آن از کد زیر استفاده کنید

var myComplexObject = new MyClass();
HttpContext.Session.SetObjectAsJson("Test", myComplexObject)

و جهت فراخوانی آن از کد زیر استفاده کنید.

var myComplexObject = HttpContext.Session.GetObjectFromJson<MyClass>("Test");

موفق باشید

 

جهت برقراری ارتباط با نویسنده پست و یا ارسال نظر اطلاعات زیر را وارد نمایید
تصویر کپچا دورآموز
زهرا مفتاحی

ممنووون مطالب عااالی مفید و کاربردی بودند .خصوصا توضیح کامل شما در مورد چگونگی ذخیره یک مدل و استفاده از اون به صورت یک کلاس در پروژه هامون.

پاسخ
خواهش می کنم
سوالات متداول دورآموز