كيفية استخدام الجلسات في تطبيق ASP.NET MVC 4؟




asp.net-mvc session (3)

محاولة

//adding data to session
//assuming the method below will return list of Products

var products=Db.GetProducts();

//Store the products to a session

Session["products"]=products;

//To get what you have stored to a session

var products=Session["products"] as List<Product>;

//to clear the session value

Session["products"]=null;

أنا جديد على ASP.NET MVC. لقد استخدمت PHP من قبل وكان من السهل إنشاء جلسة عمل وتحديد سجلات المستخدم بناءً على متغيرات الجلسة الحالية.

لقد بحثت في كل مكان على الإنترنت عن برنامج تعليمي بسيط خطوة بخطوة يمكن أن يوضح لي كيفية إنشاء واستخدام الجلسات في تطبيق C # ASP.NET MVC 4 الخاص بي. أرغب في إنشاء جلسة عمل مع متغيرات المستخدم التي يمكنني الوصول إليها من أي مكان في وحدات التحكم الخاصة بي وتكون قادراً على استخدام المتغيرات في استعلامات LINQ الخاصة بي.

-شكرا مقدما!


نظرًا لطبيعة الويب عديمة الحالة ، تعتبر الجلسات أيضًا طريقة مفيدة للغاية لاستمرار عرض الكائنات عبر الطلبات من خلال إجراء تسلسل لها وتخزينها في جلسة.

يمكن أن تكون حالة الاستخدام الأمثل لهذا إذا كنت تحتاج إلى الوصول إلى معلومات منتظمة عبر التطبيق الخاص بك ، لحفظ مكالمات قاعدة بيانات إضافية على كل طلب ، يمكن تخزين هذه البيانات في كائن ما وغير مرسلة على كل طلب ، مثل:

جسمنا القابل لإعادة الاستخدام ، القابل للتسلسل:

[Serializable]
public class UserProfileSessionData
{
    public int UserId { get; set; }

    public string EmailAddress { get; set; }

    public string FullName { get; set; }
}

حالة الاستخدام:

public class LoginController : Controller {

    [HttpPost]
    public ActionResult Login(LoginModel model)
    {
        if (ModelState.IsValid)
        {
            var profileData = new UserProfileSessionData {
                UserId = model.UserId,
                EmailAddress = model.EmailAddress,
                FullName = model.FullName
            }

            this.Session["UserProfile"] = profileData;
        }
    }

    public ActionResult LoggedInStatusMessage()
    {
        var profileData = this.Session["UserProfile"] as UserProfileSessionData;

        /* From here you could output profileData.FullName to a view and
        save yourself unnecessary database calls */
    }

}

بمجرد أن يتم تسلسل هذا الكائن ، يمكننا استخدامه عبر جميع وحدات التحكم دون الحاجة إلى إنشائه أو الاستعلام عن قاعدة البيانات الخاصة بالبيانات الموجودة به مرة أخرى.

قم بحقن كائن الجلسة باستخدام Dependency Injection

في عالم مثالي ، ستقوم " بالبرمجة لواجهة ، وليس تنفيذ " ، وحقن كائن جلسة التداول الخاص بك في وحدة التحكم الخاصة بك باستخدام حاوية انقلاب التحكم الخاصة بك ، مثل ذلك (يستخدم هذا المثال StructureMap لأنه هو الأكثر دراية بـ ).

public class WebsiteRegistry : Registry
{
    public WebsiteRegistry()
    {
        this.For<IUserProfileSessionData>().HybridHttpOrThreadLocalScoped().Use(() => GetUserProfileFromSession());   
    }

    public static IUserProfileSessionData GetUserProfileFromSession()
    {
        var session = HttpContext.Current.Session;
        if (session["UserProfile"] != null)
        {
            return session["UserProfile"] as IUserProfileSessionData;
        }

        /* Create new empty session object */
        session["UserProfile"] = new UserProfileSessionData();

        return session["UserProfile"] as IUserProfileSessionData;
    }
}

يمكنك تسجيل ذلك في ملف Global.asax.cs الخاص بك.

بالنسبة لأولئك الذين ليسوا على دراية بحقن كائنات الجلسات ، يمكنك العثور على تدوينات أكثر عمقًا حول الموضوع here .

كلمة للتحذير:

تجدر الإشارة إلى أنه ينبغي الحد من الجلسات إلى الحد الأدنى ، وقد تبدأ الجلسات الكبيرة في إحداث مشكلات في الأداء.

من المستحسن أيضًا عدم تخزين أي بيانات حساسة فيها (كلمات المرور ، إلخ).


يمكن لـ U تخزين أي قيمة في جلسة العمل مثل Session ["FirstName"] = FirstNameTextBox.Text؛ ولكني سوف أقترح عليك أن تأخذ مجالًا ثابتًا في قيمة تعيين النموذج إليه ويمكنك الوصول إلى قيمة الحقل تلك في أي مكان في التطبيق. لا تحتاج إلى جلسة. جلسة يجب تجنبها.

public class Employee
{
   public int UserId { get; set; }
   public string EmailAddress { get; set; }
   public static string FullName { get; set; }
}

على وحدة تحكم - Employee.FullName = "ABC" ؛ الآن يمكنك الوصول إلى هذا الاسم الكامل في أي مكان في التطبيق.





session-variables