วิธีการตั้งค่าการหมดเวลาของเซสชันใน web.config


179

ฉันพยายามอย่างหนัก แต่ไม่สามารถหาวิธีแก้ปัญหาเกี่ยวกับวิธีตั้งค่าการหมดเวลาเซสชันสำหรับเซสชันที่อยู่ระหว่างดำเนินการสำหรับเว็บแอปพลิเคชัน ASP.Net

ฉันใช้ VSTS 2008 + .Net 3.5 + C # นี่คือสิ่งที่ฉันเขียนด้วยตัวเองเพื่อตั้งค่าการหมดเวลาเป็น 1 นาทีถูกต้องหรือไม่

ฉันเขียนภายใต้ส่วน system.web ใน web.config

<sessionState timeout="1" mode="InProc" />

5
วิธีที่คุณกำหนดไทม์เอาต์นั้นถูกต้อง คุณมีปัญหากับมันหรือไม่?
ดาริน Dimitrov

7
คุณรู้ไหมว่านี่หมายความว่ามันจะหมดอายุหลังจากไม่มีกิจกรรมเป็นเวลา 1 นาทีไม่ใช่หลังจากเริ่มต้นไป 1 นาทีใช่หรือไม่ ฉันเดาว่าถ้าคุณถามคำถามนี้และพิมพ์การหมดเวลาอย่างถูกต้องคุณอาจเข้าใจผิดว่ามันทำงานอย่างไร
Ivan Zlatanov

1
ฉันต้องตั้งเวลาที่ไม่ใช้งานมันเป็นสิ่งที่ฉันต้องการ ขอบคุณ Ivan!
George2

ฮ่า ๆ! ฉันไม่แนะนำให้ตั้งค่าการหมดเวลาเป็นเพียง 1 นาที นั่นจะฆ่าประโยชน์ใช้สอย!
Brian McCarthy

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

คำตอบ:


323

หากคุณต้องการตั้งค่าการหมดเวลาเป็น 20 นาทีให้ใช้สิ่งนี้:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

16
20 นาทีหรือชั่วโมง? (timeout = "20")
Muhammad Awais

21
การกำหนดค่าระบุการหมดเวลาในไม่กี่นาทีดังนั้น 20 นาที
Wolfwyrd

50

ค่าที่คุณตั้งค่าไว้ในtimeoutแอตทริบิวต์เป็นหนึ่งในวิธีที่ถูกต้องในการตั้งค่าการหมดเวลาของเซสชัน

แอtimeoutททริบิวระบุจำนวนนาทีที่เซสชันสามารถใช้งานได้ก่อนที่จะถูกทิ้ง ค่าเริ่มต้นสำหรับคุณลักษณะนี้คือ 20

ด้วยการกำหนดค่า 1 ให้กับแอททริบิวนี้คุณได้กำหนดให้เซสชันถูกยกเลิกใน 1 นาทีหลังจากที่ไม่ได้ใช้งาน

ในการทดสอบให้สร้างหน้า aspx อย่างง่ายและเขียนรหัสนี้ในเหตุการณ์ Page_Load

Response.Write(Session.SessionID);

เปิดเบราว์เซอร์และไปที่หน้านี้ รหัสเซสชันจะถูกพิมพ์ รอสักครู่ผ่านไปแล้วกดรีเฟรช รหัสเซสชันจะเปลี่ยนไป

ตอนนี้ถ้าฉันเดาถูกต้องคุณต้องการให้ผู้ใช้ของคุณออกจากระบบทันทีที่เซสชั่นหมดเวลา สำหรับการทำเช่นนี้คุณสามารถรัดหน้าเข้าสู่ระบบซึ่งจะตรวจสอบข้อมูลประจำตัวของผู้ใช้และสร้างตัวแปรเซสชั่นเช่นนี้ -

Session["UserId"] = 1;

ตอนนี้คุณจะต้องทำการตรวจสอบในทุกหน้าสำหรับตัวแปรนี้เช่นนี้ -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

นี่เป็นตัวอย่างที่แสดงให้เห็นว่ามันทำงานอย่างไร

แต่สำหรับการสร้างแอปที่ปลอดภัยในคุณภาพการผลิตของคุณให้ใช้คลาสRoles & Membership ที่จัดทำโดย ASP.NET พวกเขาให้การรับรองความถูกต้องโดยใช้แบบฟอร์มซึ่งมีความน่าเชื่อถือมากขึ้นกว่าการตรวจสอบตามเซสชันปกติที่คุณพยายามใช้


คำแนะนำที่ดีเยี่ยม ... ตรวจสอบให้แน่ใจว่าได้ตั้งค่าตัวแปรเซสชันก่อนที่จะทำการทดสอบด้วย Response.Write (Session.SessionID); ฉลาดก็จะรีเฟรชด้วย ID ใหม่ทุกครั้งที่คุณรีเฟรช
Chris Catignani

1

หากคุณกำลังใช้ MVC คุณใส่สิ่งนี้ไว้ในไฟล์ web.config ในไดเรกทอรีรูทของเว็บแอปพลิเคชันไม่ใช่ web.config ในไดเรกทอรี Views นอกจากนี้ยังต้องอยู่ในโหนด system.web ซึ่งไม่เหมือนกับ George2 ที่ระบุในคำถามของเขา: "ฉันเขียนภายใต้ system.web ใน web.config"

ค่าพารามิเตอร์การหมดเวลาแสดงถึงนาที

มีคุณสมบัติอื่น ๆ ที่สามารถตั้งค่าในองค์ประกอบ sessionState คุณสามารถค้นหาข้อมูลได้ที่นี่: docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

จากนั้นคุณสามารถตรวจสอบจุดเริ่มต้นของเซสชันใหม่ในไฟล์ Global.asax โดยการเพิ่มวิธีการต่อไปนี้:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}

0

ใช้สิ่งนี้ในweb.config:

<sessionState 

  timeout="20" 
/>

30
คุณไม่ต้องการคุณลักษณะส่วนใหญ่ที่คุณแสดงรายการtimeoutจริงๆ stateConnectionStringและsqlConnectionStringจะถูกละเว้นเมื่อmode="InProc"และค่าสำหรับmodeและcookielessถูกตั้งค่าเป็นค่าเริ่มต้น ดังนั้นนี่จึงกลั่นลงไปที่คำตอบของ Wolfwyrd
arcain

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