जेएसपी - कुकीज़ हैंडलिंग
इस अध्याय में, हम JSP में कुकीज़ हैंडलिंग पर चर्चा करेंगे। कुकीज़ पाठ फ़ाइलें क्लाइंट कंप्यूटर पर संग्रहीत होती हैं और उन्हें विभिन्न सूचना ट्रैकिंग उद्देश्यों के लिए रखा जाता है। जेएसपी अंतर्निहित सर्वलेट तकनीक का उपयोग करके HTTP कुकीज़ का पारदर्शी समर्थन करता है।
उपयोगकर्ताओं को पहचानने और वापस करने में तीन चरण शामिल हैं -
सर्वर स्क्रिप्ट ब्राउज़र में कुकीज़ का एक सेट भेजता है। उदाहरण के लिए, नाम, उम्र, या पहचान संख्या, आदि।
ब्राउज़र भविष्य की उपयोग के लिए स्थानीय मशीन पर इस जानकारी को संग्रहीत करता है।
जब अगली बार ब्राउज़र वेब सर्वर को कोई अनुरोध भेजता है तो यह उन कुकीज़ की जानकारी सर्वर को भेजता है और सर्वर उस जानकारी का उपयोग उपयोगकर्ता की पहचान करने के लिए करता है या किसी अन्य उद्देश्य के लिए भी हो सकता है।
यह अध्याय आपको सिखाएगा कि कुकीज़ को कैसे सेट या रीसेट करना है, उन्हें कैसे एक्सेस करना है और JSP प्रोग्राम्स का उपयोग करके उन्हें कैसे हटाना है।
एक कुकी की शारीरिक रचना
कुकीज़ आमतौर पर एक HTTP हेडर में सेट की जाती हैं (हालांकि जावास्क्रिप्ट एक ब्राउज़र पर सीधे कुकी भी सेट कर सकती है)। कुकी सेट करने वाला JSP हेडर भेज सकता है जो कुछ इस तरह दिखता है -
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT;
path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html
जैसा कि आप देख सकते हैं, Set-Cookie header शामिल a name value pair, a GMT date, a path तथा a domain। नाम और मान URL एनकोडेड होगा। expires फ़ील्ड ब्राउज़र के लिए एक निर्देश है "forget" दी गई समय और तारीख के बाद कुकी।
यदि ब्राउज़र कुकीज़ को संग्रहीत करने के लिए कॉन्फ़िगर किया गया है, तो यह समाप्ति तिथि तक यह जानकारी रखेगा। यदि उपयोगकर्ता कुकी के पथ और डोमेन से मेल खाने वाले किसी भी पृष्ठ पर ब्राउज़र को इंगित करता है, तो यह कुकी को सर्वर पर भेज देगा। ब्राउज़र के हेडर कुछ इस तरह दिख सकते हैं -
GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz
एक JSP स्क्रिप्ट में अनुरोध विधि के माध्यम से कुकीज़ तक पहुंच होगी request.getCookies()जो कुकी वस्तुओं की एक सरणी देता है ।
सर्वलेट कुकीज़ विधियाँ
निम्नलिखित तालिका कुकी विधि से संबंधित उपयोगी विधियों को सूचीबद्ध करती है, जिन्हें आप JSP में कुकीज़ में हेरफेर करते समय उपयोग कर सकते हैं -
क्र.सं. | विधि और विवरण |
---|---|
1 | public void setDomain(String pattern) यह विधि उस डोमेन को सेट करती है जिस पर कुकी लागू होती है; उदाहरण के लिए, tutorialspoint.com। |
2 | public String getDomain() इस विधि से वह डोमेन मिलता है जिस पर कुकी लागू होती है; उदाहरण के लिए, tutorialspoint.com। |
3 | public void setMaxAge(int expiry) यह विधि कुकी को समाप्त होने से पहले कितना समय (सेकंड में) सेट करना चाहिए। यदि आप इसे सेट नहीं करते हैं, तो कुकी केवल वर्तमान सत्र के लिए चलेगी। |
4 | public int getMaxAge() यह विधि कुकी की अधिकतम आयु, सेकंड में निर्दिष्ट, डिफ़ॉल्ट रूप से, -1 ब्राउज़र बंद होने तक कुकी का संकेत देना जारी रहेगा। |
5 | public String getName() यह विधि कुकी का नाम देती है। निर्माण के बाद नाम नहीं बदला जा सकता है। |
6 | public void setValue(String newValue) यह विधि कुकी से संबंधित मान सेट करती है। |
7 | public String getValue() इस विधि से कुकी से जुड़ा मूल्य प्राप्त होता है। |
8 | public void setPath(String uri) यह विधि उस पथ को सेट करती है जिस पर यह कुकी लागू होती है। यदि आप कोई पथ निर्दिष्ट नहीं करते हैं, तो कुकी को सभी URL के लिए एक ही निर्देशिका में वर्तमान पृष्ठ के साथ-साथ सभी उपनिर्देशिकाओं के लिए लौटा दिया जाता है। |
9 | public String getPath() इस विधि को वह रास्ता मिलता है जिस पर यह कुकी लागू होती है। |
10 | public void setSecure(boolean flag) यह विधि बूलियन मान को इंगित करती है कि क्या कुकी को केवल एन्क्रिप्टेड (यानी, एसएसएल) कनेक्शन पर भेजा जाना चाहिए। |
1 1 | public void setComment(String purpose) यह विधि एक टिप्पणी निर्दिष्ट करती है जो कुकी के उद्देश्य का वर्णन करती है। यदि ब्राउज़र उपयोगकर्ता के लिए कुकी प्रस्तुत करता है तो यह टिप्पणी उपयोगी है। |
12 | public String getComment() यह विधि इस कुकी के उद्देश्य का वर्णन करते हुए टिप्पणी लौटाती है, या यदि कुकी की कोई टिप्पणी नहीं है, तो इसे रद्द कर दें। |
JSP के साथ कुकीज़ सेट करना
JSP के साथ कुकीज़ सेट करने में तीन चरण शामिल हैं -
चरण 1: कुकी ऑब्जेक्ट बनाना
आप कुकी निर्माता को कुकी नाम और कुकी मान के साथ कॉल करते हैं, जो दोनों तार हैं।
Cookie cookie = new Cookie("key","value");
ध्यान रखें, न तो नाम और न ही मूल्य में सफेद स्थान या निम्न में से कोई भी वर्ण होना चाहिए -
[ ] ( ) = , " / ? @ : ;
चरण 2: अधिकतम आयु निर्धारित करना
तुम इस्तेमाल setMaxAgeयह निर्दिष्ट करने के लिए कि कुकी कितने समय (सेकंड में) मान्य होनी चाहिए। निम्न कोड 24 घंटे के लिए कुकी सेट करेगा।
cookie.setMaxAge(60*60*24);
चरण 3: HTTP प्रतिक्रिया हेडर में कुकी भेजना
तुम इस्तेमाल response.addCookie HTTP प्रतिक्रिया हेडर में कुकीज़ जोड़ने के लिए निम्नानुसार है
response.addCookie(cookie);
उदाहरण
पहले और अंतिम नाम के लिए कुकीज़ सेट करने के लिए अपने फॉर्म उदाहरण को संशोधित करते हैं।
<%
// Create cookies for first and last names.
Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
// Set expiry date after 24 Hrs for both the cookies.
firstName.setMaxAge(60*60*24);
lastName.setMaxAge(60*60*24);
// Add both the cookies in the response header.
response.addCookie( firstName );
response.addCookie( lastName );
%>
<html>
<head>
<title>Setting Cookies</title>
</head>
<body>
<center>
<h1>Setting Cookies</h1>
</center>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>
हमें उपरोक्त कोड डालते हैं main.jsp फ़ाइल और इसे निम्नलिखित HTML पृष्ठ में उपयोग करें -
<html>
<body>
<form action = "main.jsp" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
उपरोक्त HTML सामग्री को एक फ़ाइल में रखें hello.jsp और रखें hello.jsp तथा main.jsp में <Tomcat-installation-directory>/webapps/ROOTनिर्देशिका। जब तुम पहुंचोगेhttp://localhost:8080/hello.jsp, यहाँ उपरोक्त फॉर्म का वास्तविक आउटपुट है।
पहले नाम और अंतिम नाम दर्ज करने का प्रयास करें और फिर सबमिट बटन पर क्लिक करें। यह आपकी स्क्रीन पर पहला नाम और अंतिम नाम प्रदर्शित करेगा और दो कुकीज़ भी सेट करेगाfirstName तथा lastName। अगली बार सबमिट बटन पर क्लिक करने पर ये कुकीज़ सर्वर पर वापस आ जाएँगी।
अगले भाग में, हम बताएंगे कि कैसे आप इन कुकीज़ को अपने वेब एप्लिकेशन में वापस एक्सेस कर सकते हैं।
JSP के साथ कुकीज़ पढ़ना
कुकीज़ पढ़ने के लिए, आपको कॉल करके javax.servlet.http.Cookie ऑब्जेक्ट्स की एक सरणी बनाने की आवश्यकता हैgetCookies( )HttpServletRequest की विधि । फिर सरणी के माध्यम से चक्र करें, और उपयोग करेंgetName() तथा getValue() प्रत्येक कुकी और संबद्ध मूल्य तक पहुंचने के तरीके।
उदाहरण
आइये अब पढ़ते हैं कुकीज़ जो पिछले उदाहरण में सेट की गई थीं -
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with the this domain
cookies = request.getCookies();
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println("<h2>No cookies founds</h2>");
}
%>
</body>
</html>
अब हम उपरोक्त कोड डालते हैं main.jspफ़ाइल करें और इसे एक्सेस करने का प्रयास करें। यदि आप सेट करते हैंfirst_name cookie "जॉन" और के रूप में last_name cookie "खिलाड़ी" के रूप में फिर चल रहा है http://localhost:8080/main.jsp निम्न परिणाम प्रदर्शित करेगा -
Found Cookies Name and Value
Name : first_name, Value: John
Name : last_name, Value: Player
JSP के साथ कुकीज़ हटाएं
कुकीज़ हटाने के लिए बहुत सरल है। यदि आप एक कुकी को हटाना चाहते हैं, तो आपको बस इन तीन चरणों का पालन करने की आवश्यकता है -
पहले से मौजूद कुकी को पढ़ें और कुकी ऑब्जेक्ट में स्टोर करें।
कुकी युग को शून्य का उपयोग करके सेट करें setMaxAge() मौजूदा कुकी को हटाने की विधि।
प्रतिक्रिया शीर्षलेख में इस कुकी को वापस जोड़ें।
उदाहरण
निम्नलिखित उदाहरण आपको दिखाएंगे कि नाम से मौजूदा कुकी को कैसे हटाया जाए "first_name" और जब आप अगली बार main.jsp JSP चलाते हैं, तो यह first_name के लिए अशक्त मान लौटाएगा।
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with the this domain
cookies = request.getCookies();
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
if((cookie.getName( )).compareTo("first_name") == 0 ) {
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("Deleted cookie: " +
cookie.getName( ) + "<br/>");
}
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println(
"<h2>No cookies founds</h2>");
}
%>
</body>
</html>
अब हम उपरोक्त कोड को डालते हैं main.jspफ़ाइल करें और इसे एक्सेस करने का प्रयास करें। यह निम्नलिखित परिणाम प्रदर्शित करेगा -
Cookies Name and Value
Deleted cookie : first_name
Name : first_name, Value: John
Name : last_name, Value: Player
अब http: // localhost: 8080 / main.jsp को एक बार फिर से चलाएं और इसे केवल एक कुकी को इस प्रकार दिखाना चाहिए -
Found Cookies Name and Value
Name : last_name, Value: Player
आप अपने कुकीज़ को इंटरनेट एक्सप्लोरर में मैन्युअल रूप से हटा सकते हैं। टूल मेनू पर शुरू करें और इंटरनेट विकल्प चुनें। सभी कुकी हटाने के लिए, कुकीज़ हटाएं बटन पर क्लिक करें।