Saya baru mengenal ASP.NET MVC. Saya telah menggunakan PHP sebelumnya dan mudah untuk membuat sesi dan memilih catatan pengguna berdasarkan variabel sesi saat ini.
Saya telah mencari di mana-mana di Internet untuk tutorial langkah-demi-langkah sederhana yang dapat menunjukkan cara membuat dan menggunakan sesi di aplikasi C # ASP.NET MVC 4 saya. Saya ingin membuat sesi dengan variabel pengguna yang dapat saya akses dari mana saja di pengontrol saya dan dapat menggunakan variabel dalam kueri LINQ saya.
asp.net-mvc
session
asp.net-mvc-4
session-variables
Thuto Paul Gaotingwe
sumber
sumber
Jawaban:
Mencoba
sumber
WebSecurity.CurrentUserId
sehingga tidak menariknya dari database berkali-kali (menurut saya sangat mahal)?Account/LogOn
keHome/Index
,Session["FirstName"]
adalahnull
. Pengembang harus membuat pengontrol induk (BaseController
) dan menentukan bidang yang dilindungi (internal protected HttpSessionStateBase SharedSession
) yang dapat mengekspos variabel Sesi bersama di semua sub pengontrol (ini mengasumsikan bahwa semua pengontrol aplikasi Anda mewarisi dariBaseController
)Karena sifat web yang tidak memiliki kewarganegaraan, sesi juga merupakan cara yang sangat berguna untuk mempertahankan objek di seluruh permintaan dengan menserialisasinya dan menyimpannya dalam satu sesi.
Contoh penggunaan yang sempurna dari hal ini adalah jika Anda perlu mengakses informasi reguler di seluruh aplikasi Anda, untuk menyimpan panggilan database tambahan pada setiap permintaan, data ini dapat disimpan dalam sebuah objek dan tidak diserialisasikan pada setiap permintaan, seperti:
Objek kami yang dapat digunakan kembali dan dapat diserialkan:
Kasus penggunaan:
Setelah objek ini telah diserialisasi, kita dapat menggunakannya di semua pengontrol tanpa perlu membuatnya atau meminta database untuk data yang ada di dalamnya lagi.
Suntikkan objek sesi Anda menggunakan Injeksi Ketergantungan
Dalam dunia yang ideal Anda akan ' memprogram ke antarmuka, bukan implementasi ' dan menyuntikkan objek sesi yang dapat diserialkan ke pengontrol Anda menggunakan wadah Inversion of Control pilihan Anda, seperti itu (contoh ini menggunakan StructureMap karena itu yang paling saya kenal ).
Anda kemudian akan mendaftarkan ini di
Global.asax.cs
file Anda .Bagi mereka yang tidak terbiasa dengan menyuntikkan objek sesi, Anda dapat menemukan entri blog yang lebih mendalam tentang subjek di sini .
Sebuah kata peringatan:
Perlu dicatat bahwa sesi harus diminimalkan, sesi besar dapat mulai menyebabkan masalah kinerja.
Juga disarankan untuk tidak menyimpan data sensitif apa pun di dalamnya (kata sandi, dll).
sumber
Ini adalah bagaimana status sesi bekerja di ASP.NET dan ASP.NET MVC:
Ikhtisar Status Sesi ASP.NET
Pada dasarnya, Anda melakukan ini untuk menyimpan nilai di objek Session:
Untuk mengambil nilai:
sumber
Account
keHome
, Sesi ["NamaDepan"] adalah null. Pengembang harus membuatBaseController
dan menentukan bidang terlindungi (internal protected HttpSessionStateBase SharedSession
) yang dapat mengeksposSession
variabel bersama di semua sub pengontrol (ini mengasumsikan bahwa semua pengontrol aplikasi Anda mewarisi dariBaseController
)Anda dapat menyimpan semua jenis data dalam satu sesi menggunakan:
Variabel ini akan bertahan sekitar 20 menit.
sumber
U dapat menyimpan nilai apa pun dalam sesi seperti Sesi ["FirstName"] = FirstNameTextBox.Text; tetapi saya akan menyarankan u untuk mengambil bidang statis dalam model menetapkan nilai untuk itu dan u dapat mengakses nilai bidang itu di mana saja dalam aplikasi. Kamu tidak butuh sesi. sesi harus dihindari.
pada pengontrol - Employee.FullName = "ABC"; Sekarang Anda dapat mengakses Nama lengkap ini di mana saja dalam aplikasi.
sumber