ASP.NET Core Razor Pages Application to Create Session Cookie and Read its Data

सबसे पहले एक ASP.NET Core Razor Pages एप्लीकेशन बनाते हैं और उसमे default सेशन सर्विस को Program.cs में जोड़ देते हैं:
builder.Services.AddSession();
सर्विस जोड़ना ही पर्याप्त नही हैं. जिस तरह घर में कूलर लगा देने से रूम ठंडा नही हो जाता बल्कि उस कूलर को चलाने के बाद ही रूम ठंडा हो पाता है ठीक उसी तरह एप्लीकेशन में सेशन सर्विस को जोड़ देना ही पर्याप्त नही है उस सर्विस को यूज करने के लिए सेशन middleware को HTTP Pipeline में जोड़ना भी अनिवार्य है ताकि एप्लीकेशन सेशन कुकी को ब्राउज़र के पास भेज सके और सेशन कुकी को ब्राउज़र से रिक्वेस्ट में प्राप्त कर सके।  
app.UseSession();
ध्यान दीजिए कि सेशन सर्विस और सेशन middleware द्वारा सेशन कुकी का निर्माण नहीं किया जाता है बल्कि ये कुकी के कॉन्फ़िगरेशन और हैंडलिंग में योगदान देते हैं. एप्लीकेशन द्वारा ही सेशन कुकी का निर्माण किया जाता है और सेशन कुकी के निर्माण के बाद सेशन सर्विस और सेशन middleware की मदद से उसे ब्राउज़र के पास भेज दिया जाता है। 

Program file के भीतर कुकी के कॉन्फ़िगरेशन के बाद कोड ऐसा दीखता है:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
// Add default session services
builder.Services.AddSession();

// Uncomment the following code to add custom session services
//builder.Services.AddSession(options =>
//{
//    options.Cookie.Name = "MySessionCookie";
//    options.IdleTimeout = TimeSpan.FromMinutes(5);
//    options.IOTimeout = TimeSpan.FromMinutes(2);
//});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();

app.UseSession();
app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();


एप्लीकेशन के भीतर सेशन कुकी बनाने के लिए निम्नलिखित SetString मेथड का प्रयोग किया जाता है
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace SessionRazorApp.Pages
{
    public class IndexModel : PageModel
    {
        public void OnGet()
        {
            HttpContext.Session.SetString("session_key1", "session_value1");
			HttpContext.Session.SetString("username", "AppliedK");
        }
    }
}
एप्लीकेशन को रन करने पर यह मेथड कॉल किया जाता है और सेशन कुकी बनाकर उसको ब्राउज़र के पास भेज दिया जाता है इस बात का सत्यापन ब्राउज़र के Developer mode (F12 Key दबा कर इस मोड में जाएं ) के Application Tab में किया जा सकता है।  

ध्यान दीजिए की डिफ़ॉल्ट सेशन कुकी का नाम .AspNetCore.Session होता है। अलग नाम के लिए कस्टम कुकी सर्विस का उपयोग कीजिए।  

अब यदि आप इस सेशन कुकी के डाटा को किसी दुसरे पेज में पढना चाहते है तो निम्नलिखित मेथड का प्रयोग किया जाता है।  निम्नलिखित कोड प्राइवेसी पेज पर सेशन कुकी के डाटा को पढ रहा है। 
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace SessionRazorApp.Pages
{
    public class PrivacyModel : PageModel
    {
        public void OnGet()
        {
            var sessionkey1 = HttpContext.Session.GetString("session_key1");
            var username = HttpContext.Session.GetString("username");
            @ViewData["SessionKey1"] = sessionkey1;
            @ViewData["Username"] = username;
        }
    }
}
सेशन कुकी के डाटा को रेजर पेज पर ऐसे दिखाया जा सकता है:
@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p>Use this page to detail your site's privacy policy.</p>
@ViewData["SessionKey1"] 
@ViewData["Username"]


एप्लीकेशन के भीतर सेशन कुकी बनाने के लिए SetString मेथड का प्रयोग किया जाता है लेकिन यह भी सम्भव है कि फ्रेमवर्क स्वतः ही एप्लीकेशन के भीतर सेशन कुकी बना दे उदाहरण के लिए जब पोस्ट मेथड से फॉर्म पोस्ट करते हैं तो ASP.NET Core फ्रेमवर्क स्वतः ही .AspNetCore.Antiforgery नाम का सेशन कुकी बनाता है

<div>
    <form method="post">
        <input type="text" name="login" />
        <input type="submit" name="action" value="Send" />
    </form>
</div>
एप्लीकेशन रन कर इसकी जाँच करें
 


टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Web Fundamental Concepts in Hindi for Beginners - FAQs about Cookies with their Answers

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Understanding differences between class and service in-depth in ASP.NET Core