หมดเวลาเซสชันใน ASP.NET


163

ฉันใช้แอพพลิเคชั่น ASP.NET 2.0 ใน IIS 6.0 ฉันต้องการให้หมดเวลาของเซสชันเป็น 60 นาทีแทนที่จะเป็นค่าเริ่มต้น 20 นาที ฉันทำสิ่งต่อไปนี้แล้ว

  1. ตั้งอยู่ใน<sessionState timeout="60"></sessionState> web.config
  2. ตั้งค่าการหมดเวลาเซสชันเป็น 60 นาทีในตัวจัดการ IIS / คุณสมบัติของเว็บไซต์ / การตั้งค่าการกำหนดค่า ASP.NET
  3. ตั้งค่าการหมดเวลาที่ไม่ได้ใช้งานเป็น 60 นาทีในคุณสมบัติ / ประสิทธิภาพของพูลแอ็พพลิเคชัน

ฉันยังคงได้รับการหมดเวลาเซสชันที่ 20 นาที มีอะไรอีกบ้างที่ฉันต้องทำ?


1
กรุณาให้ข้อมูลเกี่ยวกับวิธีการที่คุณวัด 20 นาที ขอให้แน่ใจว่า 20 นาทีเป็นการหมดเวลาของเซสชันและไม่ใช่ประเภทอื่น
จอห์นแซนเดอ

11
โปรดทำเครื่องหมายคำตอบคุณภาพตามที่ยอมรับโดยใช้เครื่องหมายถูกใกล้ลูกศร upvote / downvote
Brian Webster

3
แปดปีต่อมาคำตอบที่ถูกต้องยังไม่เป็นที่ยอมรับ
นาธาน

โปรดอธิบายสิ่งที่คุณหมายถึงโดย IIS manager / การตั้งค่าคุณสมบัติของเว็บไซต์ / ASP.NET การตั้งค่า คุณเปลี่ยนแปลงอะไรใน IIS ทีละขั้นตอน
niico

คำตอบ:


275

คุณใช้การตรวจสอบสิทธิ์ของฟอร์มหรือไม่

การรับรองความถูกต้องของฟอร์มใช้ค่าของตัวเองสำหรับการหมดเวลา (30 นาทีโดยค่าเริ่มต้น) การหมดเวลาการรับรองความถูกต้องของฟอร์มจะส่งผู้ใช้ไปยังหน้าเข้าสู่ระบบโดยที่เซสชันยังทำงานอยู่ นี่อาจดูเหมือนว่าแอปของคุณให้เมื่อเซสชันหมดเวลาทำให้สับสนกับอีกแอปหนึ่ง

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

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

การตั้งค่าการหมดเวลาของแบบฟอร์มให้เป็นสิ่งที่น้อยกว่าการหมดเวลาของเซสชันสามารถให้หน้าต่างแก่ผู้ใช้ในการล็อกอินกลับโดยไม่สูญเสียข้อมูลเซสชันใด ๆ


@ แตกได้ในไม่กี่นาที
Word Rearranger

44

ฉันไม่รู้เกี่ยวกับ web.config หรือ IIS แต่ฉันเชื่อว่าจากรหัส C # คุณสามารถทำได้

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

22
สิ่งนี้จะปรับการหมดเวลาของเซสชันปัจจุบันเท่านั้นหรือไม่ หรือสิ่งนี้จะปรับการหมดเวลาสำหรับแอปพลิเคชันทั้งหมดหรือไม่
Johncl

2
ไม่มีอะไรในเอกสารที่บ่งบอกว่าการตั้งค่า Session.Timeoutนั้นแตกต่างจากการใช้ web.config หรือ IIS ดังนั้นฉันคิดว่ามันเหมาะสำหรับการใช้งานทั้งหมด
Drasive

ฉันคิดว่า @rasive มีสิทธิ์ แต่ต้องพิสูจน์อย่างน้อย 2 ไคลเอนต์ที่เชื่อมต่อกับเซิร์ฟเวอร์แยกจากกันและตรวจสอบการหมดเวลาเซสชันว่าง
QMaster

42

ใช้บล็อกรหัสต่อไปนี้ในไฟล์ web.config ของคุณ การหมดเวลาเซสชันเริ่มต้นที่นี่คือ 80 นาที

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

ใช้ลิงค์ต่อไปนี้สำหรับ Session Timeout พร้อมข้อความแจ้งเตือนป๊อปอัพ

ตัวอย่างการหมดเวลาของเซสชัน

FYI: ตัวอย่างด้านบนทำด้วยตัวควบคุมป๊อปอัพ devexpress ดังนั้นคุณต้องปรับแต่ง / แทนที่ตัวควบคุมป๊อปอัพ devexpress ด้วยตัวควบคุมป๊อปอัพปกติ หากคุณใช้ devexpress ไม่จำเป็นต้องปรับแต่ง


ผิดพลาดในการปรุงอาหาร?
Kiquenet

3
@Kiquenet หากคุณตั้งค่า cookieless เป็น true ดังนั้น sessionId ของคุณจะถูกฝังใน URL ซึ่งมีความเสี่ยงด้านความปลอดภัยสูง เฟรมเวิร์ก ASP.NET จะแทรก id ที่ไม่ซ้ำกันลงใน URL คุณสามารถตรวจสอบได้โดยปิดการใช้งานคุกกี้หรือโดยการตั้งค่าแอตทริบิวต์ cookieless ให้เป็นจริงเหมือนที่คุณทำ ตาม MSDN ตามค่าเริ่มต้นค่า SessionID จะถูกเก็บไว้ในคุกกี้เซสชันที่ไม่หมดอายุในเบราว์เซอร์ แต่ถ้าคุณระบุ cookieless = "true" ดังนั้น ASP.NET จะรักษาสถานะเซสชัน cookieless โดยอัตโนมัติโดยใส่รหัสเซสชันที่ไม่ซ้ำกันลงใน URL ของหน้าเว็บ .
Hamza Khanzada

8

คุณมีอะไรใน machine.config ที่อาจจะมีผลหรือไม่ การตั้งค่าการหมดเวลาของเซสชันใน web.config ควรแทนที่การตั้งค่าใด ๆ ใน IIS หรือ machine.config อย่างไรก็ตามหากคุณมีไฟล์ web.config ที่ไหนสักแห่งในโฟลเดอร์ย่อยในแอปพลิเคชันของคุณการตั้งค่านั้นจะแทนที่หนึ่งในรากของแอปพลิเคชันของคุณ

นอกจากนี้หากฉันจำได้อย่างถูกต้องหมดเวลาใน IIS จะมีผลกับหน้า. asp ไม่ใช่. aspx คุณแน่ใจหรือว่ารหัสเซสชันใน web.config นั้นถูกต้อง? ควรมีลักษณะดังนี้:

<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

ในสถานการณ์ของฉันมันเป็น Application Pool มันถูกตั้งค่าให้เริ่มต้นใหม่เมื่อไม่ได้ใช้งานสำหรับ xx นาที เมื่อฉันตั้งค่าให้ไม่รีสตาร์ทดูเหมือนว่าจะใช้ค่าจาก Web Config


ฉันรู้ว่าพวกเราอยู่ในปี 2020 แต่นี่มันแก้ไขปัญหาของฉันได้แล้ว
Binary9 9

8

นั่นคือทั้งหมดที่คุณต้องทำ ...

คุณแน่ใจหรือว่าหลังจาก 20 นาทีเหตุผลที่เซสชั่นกำลังจะหายไปนั้นมาจากการไม่ได้ใช้งาน ...

มีสาเหตุหลายประการว่าทำไมเซสชันจึงถูกล้างข้อมูล คุณสามารถเปิดใช้งานการบันทึกเหตุการณ์สำหรับ IIS และจากนั้นสามารถใช้ตัวแสดงเหตุการณ์เพื่อดูสาเหตุที่เซสชันถูกล้างข้อมูล ... คุณอาจพบว่ามันเป็นเพราะเหตุผลอื่น ๆ ?

คุณยังสามารถอ่านเอกสารประกอบสำหรับข้อความเหตุการณ์และตารางกิจกรรมที่เกี่ยวข้อง


3

หากคุณกำลังใช้การรับรองความถูกต้องฉันขอแนะนำให้เพิ่มสิ่งต่อไปนี้ในไฟล์ web.config

ในกรณีของฉันผู้ใช้จะถูกนำไปยังหน้าเข้าสู่ระบบเมื่อหมดเวลา:

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

ฉันพบข้อผิดพลาดที่นี่ <authentication mode = "Forms"> หลังจากที่ฉันวางไว้ใน web.config
Lst Patrick


2

เนื่องจาก ASP.Net core 1.0 (vNext หรือชื่อใดก็ตามที่ใช้สำหรับมัน) เซสชันถูกนำมาใช้แตกต่างกัน ผมเปลี่ยนค่าเซสชั่นหมดเวลาในStartup.cs, void ConfigureServicesใช้:

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

หรือถ้าคุณต้องการใช้appsettings.jsonไฟล์คุณสามารถทำสิ่งต่อไปนี้:

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

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

2

คุณสามารถค้นหาการตั้งค่าได้ที่นี่ใน IIS:

การตั้งค่า

สามารถพบได้ในระดับเซิร์ฟเวอร์ระดับเว็บไซต์หรือระดับแอปภายใต้ "ASP"

ฉันคิดว่าคุณสามารถตั้งค่าได้ที่ web.config level ที่นี่ กรุณายืนยันด้วยตัวคุณเอง

<configuration>
   <system.web>

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

   </system.web>
</configuration>

นอกจากนี้ใน Global.asax
Kiquenet

1

ค่าการหมดเวลาเซสชันของ IIS ใช้สำหรับแอปพลิเคชัน. asp แบบคลาสสิกเท่านั้นซึ่งจะควบคุมในการกำหนดค่า IIS ในกรณีของคุณสำหรับแอป ASP.NET จะใช้เฉพาะค่าการหมดเวลาที่ระบุในเว็บ


แล้วไทม์พูลของแอพของ IIS ล่ะ
SteveCav

1

หมดเวลาเซสชันเริ่มต้นถูกกำหนดเป็น IIS ถึง 20 นาที

ทำตามขั้นตอนด้านล่างสำหรับแต่ละไซต์ที่โฮสต์บนเว็บ IIS 8.5

การกำหนดค่า IIS ไทม์เอาต์

เปิดตัวจัดการ IIS 8.5

คลิกชื่อไซต์

เลือก "เครื่องมือแก้ไขการกำหนดค่า" ในส่วน "การจัดการ"

จากรายการดร็อปดาวน์ "Section:" ที่ด้านบนของตัวแก้ไขการกำหนดค่าค้นหา "system.web / sessionState"

ตั้งค่า "หมดเวลา" เป็น "00:20:00 หรือน้อยกว่า" โดยใช้ค่าต่ำสุดที่เป็นไปได้ทั้งนี้ขึ้นอยู่กับแอปพลิเคชันค่าที่ยอมรับได้คือ 5 นาทีสำหรับแอปพลิเคชันมูลค่าสูง 10 นาทีสำหรับแอปพลิเคชันขนาดกลางและ 20 นาที แอปพลิเคชันที่คุ้มค่า

ในบานหน้าต่าง "การกระทำ" คลิก "ใช้"


0

หากคุณต้องการหมดเวลาเซสชันสำหรับเว็บไซต์มากกว่าลบ

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

แท็กจากไฟล์ web.config


-1

คุณสมบัติการหมดเวลาระบุช่วงเวลาการหมดเวลาที่กำหนดให้กับวัตถุเซสชันสำหรับแอปพลิเคชันเป็นนาที หากผู้ใช้ไม่รีเฟรชหรือขอหน้าภายในระยะเวลาหมดเวลาเซสชันจะสิ้นสุดลง

IIS 6.0: ค่าต่ำสุดที่อนุญาตคือ 1 นาทีและสูงสุดคือ 1440 นาที

Session.Timeout = 600;

-2

หลังจากเปลี่ยนค่าการหมดเวลาของเซสชันใน IIS โปรดเริ่มต้น IIS ใหม่ เพื่อให้บรรลุไปที่พรอมต์คำสั่ง พิมพ์ IISRESET แล้วกด Enter


การแก้ไขไฟล์ web.config จะทำให้ IIS รีเซ็ตโดยอัตโนมัติ
Timothy Gonzalez
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.