Cara menggunakan sesi di ASP.NET MVC 4 aplikasi?

Saya baru ASP.NET MVC. Saya telah menggunakan PHP sebelum dan itu mudah untuk membuat sesi dan pilih catatan pengguna berdasarkan arus variabel sesi.

Saya telah melihat di mana-mana di Internet secara sederhana langkah-demi-langkah tutorial yang dapat menunjukkan padaku bagaimana untuk membuat dan menggunakan sesi di C# ASP.NET MVC 4 aplikasi. Saya ingin membuat sebuah session dengan pengguna variabel yang bisa saya akses dari mana saja di controller dan dapat menggunakan variabel-variabel dalam LINQ query.

-Terima kasih sebelumnya!

Mengomentari pertanyaan (2)
Larutan

Mencoba

//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;

//to clear the session value

Session["products"]=null;
Komentar (9)

Karena stateless sifat dari web, sesi juga cara yang sangat berguna untuk bertahan benda-benda di seluruh permintaan oleh serialising mereka dan menyimpannya dalam sebuah sesi.

Sempurna gunakan kasus ini bisa jadi jika anda perlu untuk mengakses informasi secara teratur di seluruh aplikasi anda, untuk menyimpan database tambahan panggilan pada setiap permintaan, data ini dapat disimpan dalam sebuah objek dan unserialised pada setiap permintaan, seperti:

Kami dapat digunakan kembali, serializable objek:

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

    public string EmailAddress { get; set; }

    public string FullName { get; set; }
}

Use case:

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 */
    }

}

Setelah objek ini telah dimuat, kita bisa menggunakannya di semua pengendali tanpa perlu membuat atau query database untuk data yang terkandung di dalamnya lagi.

Inject objek sesi menggunakan Dependency Injection

Dalam dunia yang ideal, anda akan 'program untuk antarmuka, tidak dilaksanakannya' dan inject anda serializable sesi objek ke controller menggunakan Inversi Kontrol wadah pilihan, seperti (contoh ini menggunakan StructureMap sebagai it's the one I'm paling akrab dengan).

public class WebsiteRegistry : Registry
{
    public WebsiteRegistry()
    {
        this.For().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;
    }
}

Anda kemudian akan mendaftarkan ini di Global.asax.cs file.

Bagi mereka yang tidak't akrab dengan menyuntikkan sesi benda-benda, anda dapat menemukan lebih mendalam posting blog tentang subjek di sini.

Sebuah kata peringatan:

It's dicatat bahwa sesi harus disimpan ke minimum, besar sesi dapat mulai menyebabkan masalah kinerja.

It's juga dianjurkan untuk tidak menyimpan data sensitif di dalamnya (password, dll).

Komentar (3)

Ini adalah bagaimana sesi negara bekerja di ASP.NET dan ASP.NET MVC:

ASP.NET Sesi Negara Ikhtisar

Pada dasarnya, anda melakukan ini untuk menyimpan nilai dalam Sesi objek:

Session["FirstName"] = FirstNameTextBox.Text;

Untuk mengambil nilai:

var firstName = Session["FirstName"];
Komentar (3)

Anda dapat menyimpan segala jenis data dalam sesi menggunakan:

Session["VariableName"]=value;

Variabel ini akan berlangsung 20 menit atau lebih.

Komentar (0)

U dapat menyimpan nilai dalam sesi suka Sesi["nama depan"] = FirstNameTextBox.Teks; tapi saya akan menyarankan anda untuk mengambil bidang statis dalam model menetapkan nilai untuk itu dan anda dapat mengakses nilai field mana saja di aplikasi. U don't perlu sesi. sesi harus dihindari.

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

pada controller - Karyawan.FullName = "ABC"; Sekarang anda dapat mengakses Nama lengkap di mana saja di aplikasi.

Komentar (1)