Pertanyaan: Mengapa Sesi terkadang hilang di beberapa mesin?
Jawaban: Ini mungkin terkait dengan lingkungan mesin, seperti firewall atau perangkat lunak anti-virus.
T: Mengapa metode Session_End tidak diaktifkan ketika Session.Abandon dipanggil?
Jawaban: Pertama-tama, metode Session_End hanya mendukung Sesi tipe InProc (dalam proses). Kedua, untuk mengaktifkan metode Session_End, Sesi harus ada (yaitu, Sesi telah digunakan dalam sistem), dan setidaknya satu permintaan harus diselesaikan (metode ini akan dipanggil dalam permintaan ini).
Q: Mengapa Session saya sering hilang ketika saya menggunakannya dalam mode InProc?
Jawaban: Masalah ini biasanya disebabkan oleh aplikasi yang didaur ulang, karena ketika menggunakan Sesi dalam proses, Sesi disimpan dalam proses aspnet_wp. Ketika proses didaur ulang, Sesi secara alami akan hilang telah didaur ulang, Anda dapat menggunakan Periksa Peraga Peristiwa sistem Anda untuk mendapatkan informasi.
Untuk informasi spesifik, silakan merujuk ke:
Variabel sesi hilang sewaktu-waktu dalam aplikasi ASP.NET
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316148
Ada juga bug di 1.0 yang menyebabkan proses pekerja didaur ulang dan dimulai ulang. Bug ini telah diperbaiki di 1.1 dan sp2.
Untuk informasi rinci tentang bug ini, silakan merujuk ke:
Proses Pekerja ASP.NET (Aspnet_wp.exe) Didaur Ulang Secara Tak Terduga.
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q321792
Pertanyaan: Mengapa ID Sesi baru sama dengan yang asli setelah Sesi habis atau Ditinggalkan?
Jawaban: Karena SessionID disimpan dalam instance browser klien, ketika waktu Sesi habis dan Sesi dibuat kembali di server, ID Sesi yang diteruskan oleh browser akan digunakan. ID Sesi tidak akan berubah setelah dibuat kembali.
Q: Mengapa SessionID berbeda untuk setiap permintaan?
Jawaban: Masalah ini mungkin disebabkan oleh tidak adanya penyimpanan informasi apa pun dalam Sesi, yaitu Sesi tidak digunakan di mana pun dalam program. Setelah informasi disimpan dalam Sesi, SessionID akan selalu terkait dengan browser, dan SessionID tidak akan berubah saat ini.
T: Bisakah Sesi dibagikan antara ASP dan ASP.NET?
Jawaban: Ya. Namun ini adalah proses yang relatif rumit. Microsoft memberikan solusi resmi. Silakan merujuk ke: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ConvertToASPNET .aspQ.
: Jenis objek apa yang dapat disimpan di Sesi?
Jawaban: Ini tergantung pada mode Sesi yang digunakan. Saat menggunakan Sesi dalam proses (InProc), objek apa pun dapat disimpan dengan mudah. Jika Anda menggunakan mode non-InProc, Anda hanya dapat menyimpan objek yang dapat diserialisasi dan dideserialisasi. Jika objek yang disimpan saat ini tidak mendukung serialisasi, maka tidak dapat disimpan dalam Sesi mode ini (non-InProc).
T: Mengapa saya tidak bisa menggunakan metode Response.Redirect dan Server.Transfer di Session_End untuk melompat ke halaman?
Jawaban: Session_End adalah fungsi pemrosesan peristiwa yang diaktifkan di dalam server. Hal ini didasarkan pada pengatur waktu di dalam server. Saat acara diaktifkan, tidak ada objek HttpRequest yang relevan di server, sehingga metode Response.Redirect dan Server.Transfer tidak dapat digunakan saat ini.
T: Bisakah saya mendapatkan objek HttpContext di Session_End?
Jawaban: Tidak, karena acara ini tidak terkait dengan permintaan (Request) apa pun dan tidak memiliki konteks berbasis permintaan.
Pertanyaan: Bagaimana cara menggunakan Sesi di Layanan Web?
Jawaban: Untuk menggunakan Sesi di Layanan Web, pemanggil Layanan Web perlu melakukan beberapa pekerjaan ekstra, dan Cookie yang digunakan saat memanggil Layanan Web harus disimpan dan disimpan. Untuk detailnya, lihat dokumentasi MSDN untuk properti HttpWebClientProtocol.CookieContainer. Namun, jika Anda menggunakan server proxy untuk mengakses Layanan Web karena keterbatasan kerangka kerja, keduanya tidak dapat berbagi Sesi.
Pertanyaan: Mengapa saya tidak bisa menggunakan Sesi saat mengkustomisasi HttpHandler saya sendiri?
Jawaban: Saat mengimplementasikan HttpHandler Anda sendiri, jika Anda ingin menggunakan Sesi, Anda harus mengimplementasikan salah satu dari dua antarmuka tanda berikut: IRequiresSessionState dan IReadOnlySessionState. Antarmuka ini tidak memiliki metode apa pun yang perlu diterapkan metode penggunaan antarmuka INamingContainer.
T: Saat saya menggunakan webfarm, mengapa Sesi hilang saat saya mengalihkan ke server web lain?
Jawaban: Untuk informasi selengkapnya, silakan merujuk ke:
PRB: Status Sesi Hilang di Web Farm Jika Anda Menggunakan Mode Sesi SqlServer atau StateServer
http://support.microsoft.com/default.aspx?scid=kb;en-us;325056Q
: Mengapa Sesi saya tidak valid dalam metode Application_OnAcquireRequestState?
Jawaban: Sesi hanya akan valid setelah acara HttpApplication.AcquireRequestState dipanggil.
Untuk informasi rinci silakan merujuk ke:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconhandlingpublicevents.asp
T: Bagaimana cara mengarahkan dari halaman HTTP ke HTTPS jika tanpa cookie digunakan?
Jawaban: Silakan coba cara berikut ini:
String originalUrl = "/fxtest3/sub/foo2.aspx";
String modifikasiUrl = " https://localhost " + Response.ApplyAppPathModifier(originalUrl);
Response.Redirect(modifiedUrl);
Q: Sesi valid dalam acara-acara di global.asax?
Jawaban: Sesi hanya valid setelah peristiwa AcquireRequestState, dan peristiwa setelah peristiwa ini dapat menggunakan Sesi.
T: Bagaimana cara menyimpan semua objek di Sesi saat ini?
Jawaban: Dapat diperoleh dengan menelusuri semua Session.Keys. Kodenya adalah sebagai berikut:
ArrayList sessionCollection = ArrayList baru();
foreach (string strKey di Session.Keys){
sessionCollection.Tambahkan(Sesi[strKey]);
}
T: Apakah mungkin untuk berbagi Sesi di aplikasi yang berbeda?
Jawab: Tidak bisa dibagikan secara langsung. Anda dapat merujuk ke cara berbagi Sesi antara ASP dan ASP.NET.
T: Apa perbedaan antara Session.Abandon dan Session.Clear?
Jawaban: Perbedaan utamanya adalah saat menggunakan Session.Abandon, metode Session_End (dalam mode InProc) dipanggil. Metode Session_Start akan diaktifkan ketika permintaan berikutnya datang. Session.Clear hanya menghapus semua data dalam Sesi dan tidak mengakhiri Sesi, sehingga metode tersebut tidak akan dipanggil.
Pertanyaan: Untuk mengakses nilai status Sesi secara berurutan, apakah Sesi menyediakan mekanisme penguncian?
Jawaban: Sesi mengimplementasikan mekanisme kunci Pembaca/Penulis:
Ketika halaman memiliki kemampuan untuk menulis untuk Sesi (yaitu, halaman tersebut memiliki tag <%@ Page EnableSessionState="True" %>), Sesi halaman tersebut menahan kunci tulis hingga permintaan selesai.
Bila laman memiliki fungsi baca-saja untuk Sesi (yaitu, laman memiliki tag <%@ Page EnableSessionState="ReadOnly" %>), Sesi yang meminta penyelesaian laman memiliki kunci baca.
Kunci baca akan memblokir kunci tulis; kunci baca tidak akan memblokir kunci baca; kunci tulis akan memblokir semua kunci baca dan tulis. Inilah sebabnya ketika halaman yang sama dalam dua bingkai menulis ke Sesi yang sama, salah satunya harus menunggu yang lain (yang sedikit lebih cepat) selesai sebelum mulai menulis.
T: Apa yang dimaksud dengan batas waktu kelancaran sesi?
Jawaban: Session smooth timeout artinya selama halaman Anda mengakses (menggunakan) Session tersebut, maka timeout tersebut akan di-refresh (dapat diartikan sebagai retiming), yaitu timeout akan dihitung ulang mulai dari permintaan halaman. Namun, halaman tersebut tidak dapat menonaktifkan Sesi. Ini akan secara otomatis mengakses Sesi halaman saat ini dan menyegarkan batas waktu.
Pertanyaan: Mengapa Sesi tidak valid pada fungsi penanganan peristiwa di global.asax?
Jawaban: Tergantung pada fungsi penanganan peristiwa di mana Sesi digunakan. Sesi hanya valid setelah peristiwa AcquireRequestState. Semua fungsi penanganan peristiwa setelah peristiwa ini dapat menggunakan Sesi, tetapi tidak yang sebelumnya.
Pertanyaan: Saat saya menulis komponen yang bergantung pada Sesi aplikasi saat ini, mengapa saya tidak bisa langsung menggunakan Session["Key"] untuk mendapatkan nilainya?
Jawaban: Session["Key"] sebenarnya adalah this.Session["Key"], yang disediakan sebagai properti Page, jadi Anda tidak dapat menggunakan properti ini secara langsung di komponen Anda. Anda dapat menggunakan Sesi dengan cara berikut:
HttpContext.Current.Session["Key"] = "Nilai Seesion Saya";
T: Ketika saya menggunakan mode InProc untuk menyimpan Sesi, di mana Sesi disimpan saat ini?
Jawaban: IIS yang berbeda memiliki metode pemrosesan yang berbeda.
Saat menggunakan IIS5, Sesi disimpan di ruang proses aspnet_wp.exe.
Saat menggunakan IIS6, semua aplikasi berbagi kumpulan aplikasi secara default, dan Sesi disimpan di ruang proses w3wp.exe.
Q: Apakah pengaturan batas waktu sesi dalam hitungan menit atau detik?
Jawaban: Ini menit, defaultnya adalah 20 menit.
Q: Apakah Sesi saya akan disimpan ketika terjadi kesalahan pada halaman? Saya perlu menangani beberapa pembersihan di Session_End, tetapi gagal, mengapa?
Jawaban: Session_End hanya akan dieksekusi ketika Sesi berjalan dalam mode InProc. Akun yang digunakan oleh Session_End adalah akun yang menjalankan proses pekerja aspnet_wp (ini dapat diatur di machine.config). Oleh karena itu, jika Anda menggunakan keamanan terintegrasi untuk menyambung ke SQL dalam metode Session_End, ini akan membuka tautan menggunakan akun proses aspnet_wp, dan keberhasilan atau kegagalan saat ini bergantung pada pengaturan keamanan SQL Anda.
Pertanyaan: Mengapa saya kehilangan sesi ketika saya mengalihkan ketika saya menyetel tanpa cookie ke true?
Jawaban: Saat menggunakan cookieless, Anda harus menggunakan jalur relatif untuk menggantikan jalur absolut dalam program. Jika Anda menggunakan jalur absolut, ASP.NET tidak akan dapat menyimpan SessionID di URL.
Misalnya: ganti myDirmySubdirdefault.aspx dengan ..default.aspx.
Pertanyaan: Bagaimana cara menyimpan SortedList di Sesi atau Cache?
Jawaban: Silakan simak cara berikut ini:
Daftar Diurutkan x = Daftar Diurutkan baru();
x.Tambahkan("Kunci1", "NilaiA");
x.Tambahkan("Kunci2", "NilaiB");
Simpan ke Sesi:
Sesi["Daftar Diurutkan1"] = x;
Gunakan metode berikut untuk mendapatkannya:
SortedList y = (SortedList) Sesi["SortedList1"];
Hal yang sama berlaku untuk Chahe.
T: Mengapa saya mendapatkan pesan kesalahan "Status sesi hanya dapat digunakan ketika aktifkanSessionState disetel ke true, baik di file konfigurasi atau di direktif Halaman"?
Jawaban: Masalah ini mungkin terjadi setelah menginstal Window Sharepoint Server (WSS) pada mesin yang telah menginstal lingkungan pengembangan Microsoft Visual Studio .NET.
Filter WSS ISAPI akan menangani semua permintaan. Saat Anda menelusuri aplikasi ASP.NET melalui direktori virtual, filter ISAPI tidak menetapkan URL ke direktori folder.
Solusinya adalah: Jangan gunakan Session pada mesin tempat WSS diinstal.
Untuk informasi rinci silakan merujuk ke:
Status sesi tidak dapat digunakan di ASP.NET dengan Windows SharePoint Services
http://support.microsoft.com/default.aspx?scid=kb;en-us;837376Q
: Bagaimana cara menghapus variabel Sesi?
Jawaban: Jika Anda ingin menghapus variabel Session, Anda dapat menggunakan metode HttpSessionState.Remove().
T: Apakah ada cara untuk mengetahui berapa banyak memori yang digunakan Sesi aplikasi saat sedang berjalan?
Jawaban: Tidak. Saat ini nilai tersebut belum dapat diverifikasi, setidaknya saya belum melihat informasi apapun mengenai hal tersebut. Namun, suatu nilai dapat diperkirakan secara kasar melalui monitor kinerja dan kode program.
Pertanyaan: Ketika ada frameset pada halaman, ditemukan bahwa SessionID halaman yang ditampilkan di setiap frame berbeda pada permintaan pertama.
Jawaban: Alasannya adalah frameset Anda ditempatkan pada halaman html, bukan halaman ASPX.
Dalam keadaan normal, jika frameset adalah halaman aspx, ketika Anda meminta halaman tersebut, permintaan tersebut terlebih dahulu dikirimkan ke server web, dan SessionID telah diperoleh. Kemudian browser akan meminta halaman lain di Frame masing-masing, sehingga SessionID semua halaman Sama saja, itu SessionID halaman FrameSet.
Namun, jika Anda menggunakan halaman Html untuk membuat halaman FrameSet, permintaan pertama adalah halaman HTML. Ketika halaman tersebut dikembalikan dari server, tidak ada Sesi yang dihasilkan halaman akan menghasilkan SessionID mereka sendiri, jadi dalam hal ini masalah ini muncul. Saat Anda me-refresh halaman, SessionID akan sama, dan itu akan menjadi SessionID dari halaman yang terakhir diminta.
T: Apakah mungkin untuk menyimpan Sesi aplikasi yang berbeda pada database berbeda di server SQL Server yang sama.
Jawaban: Ya, silakan merujuk ke:
MEMPERBAIKI: Menggunakan satu database SQL untuk semua aplikasi untuk status sesi SQL Server dapat menyebabkan kemacetan
http://support.microsoft.com/default.aspx?scid=kb;en-us;836680Q
: Bisakah saya mendapatkan objek HttpSessionState dan HttpContext yang valid di Session_End?
Jawaban: Anda bisa mendapatkan objek HttpSessionState dalam metode ini, dan Anda dapat mengaksesnya secara langsung menggunakan Session. Namun, objek HttpContext tidak dapat diperoleh karena acara tersebut tidak terkait dengan permintaan apa pun, sehingga tidak ada objek konteks.
T: Saat menggunakan Sesi dalam mode SQL Server, mengapa Sesi saya tidak kedaluwarsa?
Jawaban: Dalam mode SqlServer, kedaluwarsa Sesi diselesaikan melalui pendaftaran Agen SQL. Silakan periksa apakah Agen SQL Anda sedang berjalan?
T: Setelah saya menyetel EnableSessionState ke "ReadOnly", saya masih dapat mengubah nilai Sesi dalam mode InProc.
Jawaban: Meskipun EnableSessionState ditandai ReadOnly, pengguna masih dapat mengedit Sesi dalam mode InProc. Satu-satunya perbedaan adalah Sesi tidak akan dikunci selama permintaan.
T: Bagaimana cara menghindari menentukan kata sandi saat menghubungkan SQL?
Jawaban: Gunakan tautan tepercaya atau gunakan string tautan terenkripsi. Untuk informasi lebih lanjut mengenai hal ini silakan merujuk ke:
Cara Menggunakan Utilitas ASP.NET untuk Mengenkripsi Kredensial dan String Koneksi Status Sesi
http://support.microsoft.com/default.aspx?scid=kb;en-us;329290Q
: Bagaimana cara menggunakan Sesi di kelas saya sendiri?
Jawaban: Anda dapat menggunakan HttpContext.Current.Session Metode spesifiknya adalah sebagai berikut:
HttpContext.Current.Session["SessionKey"] = "SessionValue";
Demikian pula Anda dapat menggunakan objek Aplikasi dengan cara ini.
T: Mengapa permintaan saya terhenti setelah beralih ke mode SQL Server?
Jawaban: Periksa apakah semua objek yang disimpan dalam Sesi dapat disimpan dalam mode SQL Server, artinya objek ini harus mendukung serialisasi.
Pertanyaan: Apa dampaknya jika Sesi disetel ke tanpa cookie?
Jawaban: Jika cookieless disetel ke true, terdapat batasan utama sebagai berikut:
1. Tautan absolut tidak dapat digunakan di halaman
2. Selain beralih antara HTTP dan HTTPS, beberapa langkah lain perlu diselesaikan dalam aplikasi.
Jika Anda mengirimkan link ke orang lain, URL saat ini akan berisi informasi ID Sesi, sehingga kedua orang tersebut akan berbagi Sesi.
Q: Apakah Session bisa disimpan di database?
Jawaban: Tentu saja, untuk detailnya, silakan merujuk ke: http://support.microsoft.com/default.aspx?scid=kb;en-us;311209
--------------- -- ------------------------------------------------ -- ------------------------------------------------ -- -
Q: Mengapa Session saya sering hilang ketika saya menggunakannya dalam mode InProc?
Situasi tambahan: Jika Anda menggunakan database Access, untuk mencegah database diunduh, beberapa orang mungkin berpikir untuk meletakkan file database di direktori bin sehingga database tidak dapat diunduh , ini juga akan menyebabkan Sesi hilang. Karena ketika mengakses aplikasi, data akan sering ditulis ke database, yang akan menyebabkan perubahan pada file database yang ditempatkan di bawah direktori bin, dan modifikasi pada direktori bin akan menyebabkan sesi hilang.
Untuk mengatasi masalah ini, Anda dapat mengubah jalur penyimpanan file database, atau menggunakan mode StateServer atau SqlServer.
Untuk informasi lebih lanjut, silakan merujuk ke:
PRB: Data Sesi Hilang Saat Anda Menggunakan Mode Status Sesi ASP.NET InProc
http://support.microsoft.com/default.aspx?scid=kb;en-us;324772
--------------------------------------------------- -----------------------
Sesi bersama multi-proyek di Asp.net dipilih dari Blog dnyz
http://dev.csdn.net/article/21/21714.shtm
1. Buat solusi kosong solusi kosong, seperti: d:MyProjectMyProject.sln
2. Buat direktori root Aplikasi Web d:MyProjectWebMis di bawah d:MyProject dan atur ke direktori virtual http://localhost/WebMis
3. Buat direktori baru sesuai modul yang ada di direktori WebMis, seperti: d:MyProjectWebMisLogin dan d:MyProjectWebMisCheckOut
4. Buat aplikasi web baru berdasarkan modul yang ada di VS.net, seperti: http://localhost/WebMis/Login dan http://localhost/WebMis/CheckOut
5. Setelah pembuatan, direktori Login dan CheckOut secara otomatis ditetapkan sebagai direktori virtual.
6. Tambahkan referensi proyek untuk Login dan CheckOut di proyek WebMis
7. Hapus direktori virtual Login dan CheckOut di IIS Manager
8. Hapus global.asax setiap proyek (hapus root proyek)
9. Hapus kode berikut di web.config proyek (hapus root proyek):
<mode autentikasi="Windows" />
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="sumber data=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />
Atau hapus web.config (jika Anda tidak perlu mengkonfigurasinya di setiap direktori)
10. Setelah dikompilasi, dapat dijalankan.