2012-04-05 13 views
11

जावा सर्वलेट्स के बारे में सामान्य प्रश्न और अनुरोधों को संभालने का सबसे अच्छा तरीका। अगर मैं एक दूरस्थ सर्वर अनुरोध से मेरी doGet विधि मारा:जावा सर्वलेट - सत्र सफाई (HttpServletRequest)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    .... 
    <do work here> 
    .... 
    kill(request); 
} 

private void kill(HttpServletRequest request) { 
//How do I kill the user session here? 
} 

के बाद मैं अपने अंत में अनुरोध पर कार्रवाई और निवेदक के लिए अपने उत्पादन उत्पन्न करते हैं, मैं मूल रूप से उनके सत्र "मारने" करना चाहते हैं। वर्तमान में, वह सत्र लिंग और इस प्रकार स्मृति को खाता है। फिर अधिकतम पहुंचने के बाद, अन्य सभी कॉल का समय समाप्त हो गया है।

मैं अनुरोध वस्तु का उपयोग कर एक HttpSession वस्तु बनाने की कोशिश की है, लेकिन एक ही परिणाम मिल गया:

HttpSession session = request.getSession(); 
session.invalidate(); 
+1

का उपयोग कर रहा धारणा है कि अपने ठोस समस्या एक अलग तरीके से हल किया जाना बाकी है से एक विशेषता निकाल सकते हैं। – BalusC

+0

शायद। अंतिम लक्ष्य यह है कि मैं अपने अनुरोध पूल के बाद अपने सत्र पूल में एक सत्र समाप्त करना चाहता हूं। अनुरोध ऑब्जेक्ट को मार रहा है या उस सत्र के लिए सत्र ऑब्जेक्ट बनाने के लिए इसे हटाए जाने के लिए, मुझे यकीन नहीं है। – user82302124

उत्तर

20
HttpSession session = request.getSession(false); 
if (session != null) { 
    session.invalidate(); 
} 

साथ प्रयास करें के रूप में द्वारा सुझाए जाने के लिए उचित तरीका है प्रलेखन। एक नया अनुरोध भेजे जाने के बाद एक नया सत्र बनाया जाएगा।

आपने बताया कि आपके सत्र अभी भी स्मृति लेते हैं। क्या सत्र में उन वस्तुओं के आपके पास कोई अन्य संदर्भ है?

तुम भी पर एक नजर है करने के लिए चाहते हो सकता है: Servlet Session behavior and Session.invalidate

2

session = request.getSession(false); // so if no session is active no session is created 
if (session != null) 
    session.setMaxInactiveInterval(1); // so it expires immediatly 
1

आप सत्र व्यवहार यानी चाहते हैं, तो कई अनुरोधों के बीच राज्य रहा। आप सत्र का निर्माण/उपयोग क्यों करना चाहते हैं। सत्र न बनाएं या सत्र में कुछ भी स्टोर न करें।

यह सुनिश्चित करने के लिए कि आपका कोड सत्र का उपयोग नहीं कर रहा है, एक अनुरोध रैपर लिखें जो getSession() विधियों को ओवरराइड करेगा।

5

आप एक सत्र

session.removeAttribute("attribute name"); 
संबंधित मुद्दे