Batas waktu sesi di ASP.NET


163

Saya menjalankan aplikasi ASP.NET 2.0 di IIS 6.0. Saya ingin batas waktu sesi menjadi 60 menit daripada 20 menit standar. Saya telah melakukan yang berikut ini

  1. Set <sessionState timeout="60"></sessionState> in web.config.
  2. Tetapkan batas waktu sesi menjadi 60 menit di pengaturan IIS manager / situs Web / pengaturan konfigurasi ASP.NET.
  3. Tetapkan batas waktu idle hingga 60 menit di properti / kinerja kumpulan aplikasi.

Saya masih mendapatkan batas waktu sesi pada 20 menit. Apakah ada hal lain yang perlu saya lakukan?


1
Harap berikan informasi tentang bagaimana Anda mengukur 20 menit. Mari kita pastikan bahwa 20 menit adalah batas waktu Sesi, dan bukan jenis lainnya.
John Saunders

11
Harap tandai jawaban berkualitas yang diterima dengan menggunakan tanda centang di dekat tanda panah naik / turun
Brian Webster

3
Delapan tahun kemudian, jawaban yang benar masih belum diterima.
Nathan

Harap jelaskan apa yang Anda maksud dengan pengaturan konfigurasi manajer IIS / situs web / ASP.NET. Langkah demi langkah apa yang Anda ubah di IIS?
niico

Jawaban:


275

Apakah Anda menggunakan otentikasi Formulir?

Formulir otentikasi menggunakan nilai sendiri untuk batas waktu (30 menit secara default). Batas waktu otentikasi bentuk akan mengirim pengguna ke halaman login dengan sesi masih aktif. Ini mungkin terlihat seperti perilaku aplikasi Anda ketika waktu sesi habis sehingga mudah untuk membingungkan satu dengan yang lain.

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

    <sessionState timeout="60"  />
</system.web>

Mengatur batas waktu formulir untuk sesuatu yang kurang dari batas waktu sesi dapat memberikan pengguna jendela untuk masuk kembali tanpa kehilangan data sesi apa pun.


@ Tidak Dapat Diuraikan dalam hitungan menit.
Word Rearranger

43

Saya tidak tahu tentang web.config atau IIS. Tapi saya percaya bahwa dari kode C # Anda dapat melakukannya seperti

Session.Timeout = 60; // 60 is number of minutes

21
Apakah ini hanya akan menyesuaikan batas waktu sesi saat ini? Atau apakah ini akan menyesuaikan batas waktu untuk seluruh aplikasi?
Johncl

2
Tidak ada dalam dokumentasi yang menunjukkan bahwa pengaturan Session.Timeoutberbeda dari menggunakan web.config atau IIS, jadi saya menganggap itu untuk seluruh aplikasi.
Drasive

Saya pikir @Drasive benar, tetapi harus dibuktikan setidaknya oleh 2 klien yang terhubung ke server dan periksa batas waktu sesi Idle.
QMaster

42

Gunakan blok kode berikut dalam file web.config Anda. Di sini waktu sesi default adalah 80 menit.

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

Gunakan tautan berikut untuk Sesi Timeout dengan pesan peringatan sembulan.

Contoh Timeout Sesi

FYI: Contoh di atas dilakukan dengan kontrol popup devexpress sehingga Anda perlu menyesuaikan / mengganti kontrol popup devexpress dengan kontrol popup normal. Jika Anda menggunakan devexpress, tidak perlu untuk menyesuaikan


salah cookieless?
Kiquenet

3
@Kiquenet, jika Anda menyetel cookieless menjadi true maka sessionId Anda akan disematkan dalam URL yang merupakan risiko keamanan tinggi. Kerangka ASP.NET menyisipkan id unik ke URL, Anda dapat memeriksanya dengan menonaktifkan cookie atau dengan mengatur atribut cookieless menjadi true seperti yang Anda lakukan. Menurut MSDN, Secara default, nilai SessionID disimpan dalam cookie sesi yang tidak kedaluwarsa di browser tetapi jika Anda menentukan cookieless = "true" maka ASP.NET mempertahankan status sesi tanpa cooki dengan secara otomatis memasukkan ID sesi unik ke dalam URL halaman .
Hamza Khanzada

8

Apakah Anda memiliki sesuatu di machine.config yang mungkin berlaku? Mengatur batas waktu sesi di web.config harus menimpa pengaturan apa pun di IIS atau machine.config, namun, jika Anda memiliki file web.config di suatu tempat di subfolder di aplikasi Anda, pengaturan itu akan menimpa yang ada di root aplikasi Anda.

Juga, jika saya ingat dengan benar, batas waktu di IIS hanya memengaruhi halaman .asp, bukan .aspx. Apakah Anda yakin kode sesi di web.config sudah benar? Seharusnya terlihat seperti:

<sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    stateNetworkTimeout="60"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
    cookieless="false"
    timeout="60"
/>

8

Dalam situasi saya, itu adalah Application Pool. Sudah diatur untuk me-restart ketika idle selama xx menit. Ketika saya mengaturnya untuk tidak me-restart, sepertinya menggunakan nilai dari Web Config.


Saya tahu kita tahun 2020 tetapi sial ini baru saja menyelesaikan masalah saya terima kasih!
Binary9

8

Itu biasanya semua yang perlu Anda lakukan ...

Apakah Anda yakin bahwa setelah 20 menit, alasan sesi hilang adalah karena tidak ada aktivitas ...

Ada banyak alasan mengapa sesi ini bisa dihapus. Anda dapat mengaktifkan pencatatan acara untuk IIS dan kemudian dapat menggunakan penampil acara untuk melihat alasan mengapa sesi itu dihapus ... Anda mungkin menemukan bahwa itu karena alasan lain mungkin?

Anda juga dapat membaca dokumentasi untuk pesan acara dan tabel acara terkait .


3

Jika Anda menggunakan Otentikasi, saya sarankan menambahkan berikut ini di file web.config.

Dalam kasus saya, pengguna akan diarahkan ke halaman login setelah waktu habis:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>

Saya mendapat kesalahan di sini <otentikasi mode = "Formulir"> setelah saya letakkan di web.config
Lst Patrick


2

Sejak ASP.Net inti 1.0 (vNext atau nama apa pun yang digunakan untuk itu) sesi diimplementasikan secara berbeda. Saya mengubah nilai batas waktu sesi di Startup.cs, void ConfigureServicesmenggunakan:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

Atau jika Anda ingin menggunakan appsettings.jsonfile, Anda dapat melakukan sesuatu seperti:

// Appsettings.json
"SessionOptions": {
    "IdleTimeout": "00:30:00"
}

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));

2

Anda dapat menemukan pengaturan di sini di IIS:

Pengaturan

Itu dapat ditemukan di level server, level situs web, atau level aplikasi di bawah "ASP".

Saya pikir Anda dapat mengaturnya di level web.config di sini. Harap konfirmasikan ini untuk Anda sendiri.

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>

Juga di Global.asax?
Kiquenet

1

Nilai batas waktu sesi IIS hanya untuk aplikasi .asp klasik, ini dikontrol pada konfigurasi IIS. Dalam kasus Anda Untuk aplikasi ASP.NET, hanya nilai batas waktu yang ditentukan web.config yang berlaku.


Bagaimana dengan batas waktu pool aplikasi IIS?
SteveCav

1

Batas waktu sesi default didefinisikan menjadi IIS hingga 20 menit

Ikuti prosedur di bawah ini untuk setiap situs yang dihosting di web IIS 8.5

Konfigurasi Batas Waktu IIS

Buka Manajer IIS 8.5.

Klik nama situs.

Pilih "Editor Konfigurasi" di bawah bagian "Manajemen".

Dari daftar tarik-turun "Bagian:" di bagian atas editor konfigurasi, temukan "system.web / sessionState".

Atur "batas waktu" menjadi "00:20:00 atau kurang", menggunakan nilai serendah mungkin tergantung pada aplikasinya. Nilai yang dapat diterima adalah 5 menit untuk aplikasi bernilai tinggi, 10 menit untuk aplikasi bernilai sedang, dan 20 menit untuk rendah aplikasi -nilai.

Di panel "Tindakan", klik "Terapkan".


0

jika Anda ingin batas waktu sesi untuk situs web daripada menghapus

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

tag dari file web.config.


-1

Properti Timeout menentukan periode waktu habis yang ditetapkan untuk objek Sesi untuk aplikasi, dalam hitungan menit. Jika pengguna tidak menyegarkan atau meminta halaman dalam periode waktu habis, sesi berakhir.

IIS 6.0: Nilai minimum yang diizinkan adalah 1 menit dan maksimum adalah 1440 menit.

Session.Timeout = 600;

-2

Setelah mengubah nilai batas waktu sesi di IIS, silakan mulai ulang IIS. Untuk mencapai ini, buka command prompt. Ketik IISRESET dan tekan enter.


Mengedit file web.config secara otomatis menyebabkan IIS diatur ulang.
Timothy Gonzalez
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.