2013-01-19 16 views
8

मैंने देखा कि अधिकांश अन्य जावा आधारित वेब अनुप्रयोगों के रूप में grails अनुप्रयोग, हमेशा एक सत्र बनाता है, भले ही इसका उपयोग नहीं किया जाता है।सत्र के बिना Grails

क्या आवश्यक होने पर केवल JSESSIONID कुकी सेट करना संभव है, उदाहरण के लिए। जब कोई लॉग इन करने का प्रयास करता है?

+1

आपको इसके बारे में चिंता करने की आवश्यकता क्यों होगी? – Gregg

+0

दो कारण: 1) यदि आप कोई सत्र बनाते हैं, तो एक कुकी सेट की जाएगी। यदि मैं नए "यूरोपीय कुकी कानून" को सही तरीके से समझता हूं, तो आपको कुकी सेट करने से पहले आपको अलगाव के लिए आगंतुकों से पूछना होगा। 2) एक सत्र संसाधनों का उपयोग करता है। अगर मुझे सत्र की आवश्यकता नहीं है, तो मुझे एक क्यों बनाना चाहिए? और यदि मैं एक आरईएसटी इंटरफ़ेस का पर्दाफाश करता हूं और क्लाइंट कुकीज़ को अनदेखा करता है, तो प्रत्येक अनुरोध एक नया सत्र तैयार करेगा :-( – rdmueller

+0

आपको कुछ और शोध करना चाहिए: सहमति आवश्यक नहीं कोई भी कुकी जो इसकी मौजूदगी के लिए नहीं थी, वेबसाइट उपयोग करने योग्य नहीं रहें, उदाहरण के लिए एक सत्र कुकी जो चेकआउट प्रक्रिया के माध्यम से किसी ग्राहक की टोकरी की सामग्री को बनाए रखती है। उसने कहा, यदि आप पहले कुकी के व्यवहार को ट्रैक किए बिना ग्राहक व्यवहार को ट्रैक करने के लिए उसी कुकी का उपयोग करना चाहते थे, तो उसे सहमति की आवश्यकता होगी। : //www.enchiladadigital.com/services/cookie-audits/eu-cookie-law-what-you-need-to-know/ – Gregg

उत्तर

4

एक सत्र कुकी की पीढ़ी निम्नलिखित पृष्ठ निर्देश जोड़कर निष्क्रिय किया जा सकता:

<%@ page session="false" %> 
1

मुझे यकीन है कि grails का कौन सा संस्करण ऊपर किया जा रहा था नहीं कर रहा हूँ, लेकिन मैं में एक ऐसी ही मुद्दे में चल रहा था एक बड़ा आवेदन। मेरा आवेदन यूआई/जीएसपी और अन्य नियंत्रकों के बीच विभाजित था जो बिना किसी दृश्य के शुद्ध जेसन/एक्सएमएल की सेवा करते थे। UI भाग को एकमात्र हिस्सा माना जाता था जो सत्रों का उपयोग करता था, लेकिन सेवाएं JSessionId भी लौट रही थीं।

चूंकि एप्लिकेशन बड़ी थी, आदेश का निवारण करने के लिए, मैं grails 1.3.7 और 2.2.1 के साथ नए अनुप्रयोगों, एक बुनियादी नियंत्रक के साथ बनाया:

class FooController { 
    static defaultAction = "lookatme" 
    def lookatme = {render(view:'lookatme')} 
    def hallo = {render(text:"<xml>some xml</xml>",contentType:"text/xml",encoding:"UTF-8")} 
    def somestate = {session.foo = "bar"; render(text:"<xml>some xml</xml>",contentType:"text/xml",encoding:"UTF-8")} 
} 

जब मैं बिल्ला पर इस चलाने के लिए, न lookatme या hallo एक JSessionId देता है। कार्रवाई somestate करता है। हमारे कोड के माध्यम से वापस जाने के बाद, हमें स्थानों (कुछ फ़िल्टर, उदाहरण के लिए) मिले जो सत्र तक पहुंचने का प्रयास कर रहे थे जब उन्हें नहीं करना चाहिए।

यदि आपका कोड JSessionId कुकीज़ के माध्यम से एक सत्र वापस कर रहा है, और आपको नहीं लगता कि यह चाहिए, तो सुनिश्चित करें कि उस क्रिया (या फ़िल्टर) में कोई कोड नहीं है जो session (या flash?) तक पहुंचता है।