2011-06-26 7 views
5

Coldfusion सत्र - कैसे वास्तव में सीएफ एक कनेक्शन की पहचान है/अद्वितीय ग्राहकColdfusion सत्र - कैसे वास्तव में सीएफ एक कनेक्शन की पहचान है/अद्वितीय ग्राहक

दूरस्थ सीएफसी मैं पद VBA से कहा जाता है के साथ खुदाई कुछ करने के बाद मैंने पाया कि वे सत्र सेट भी। जिसने मुझे विभिन्न ग्राहकों के बीच सीएफ कैसे अंतर किया है, इस बारे में स्पष्टीकरण के लिए मुझे सोचने और गुगलिंग (असफल) करने के लिए मिला। मैंने पहले माना था कि यह क्लाइंट की पहचान करने के लिए एक ब्राउज़र कुकी सेट की जा रही थी, लेकिन फिर मैं एक शब्द ऐप के माध्यम से एक वेब सेवा का उपभोग कर रहा था और अभी भी सत्र चर और सत्र आईडी सेट प्राप्त कर रहा था।

तो यदि मैं ब्राउजर (क्रोम) के माध्यम से अपने ऐप में लोड और लॉगिन करता हूं और एक टेस्ट पेज हिट करता हूं तो मुझे jsessionID = 123 मिलता है, अगर मैं फ़ायरफ़ॉक्स को फायर करता हूं और लॉगिन करता हूं तो मुझे उम्मीद के अनुसार एक अलग jsessionid = 234 मिलता है। यदि मैंने वर्ड वीबीए का उपयोग कर एक वेब सेवा wsdl के रूप में एक दूरस्थ सीएफसी मारा है तो मैं देख सकता हूं कि jsessionid = 345 VBA मॉड्यूल पर वापस आ गया है। अगर मैं वर्ड बंद करता हूं और अपने मैक्रो को फिर से खोलता हूं (वेब ​​सेवा के लिए लॉगिन अनुरोध होता है) मुझे एक नया jsessionID = 567

तो सीएफ की पहचान के अनुरोध के बारे में क्या है और यह क्लाइंट की पहचान कैसे जारी रखता है ?

यह एक VBA http कॉल

Sub doHTTP() 

Dim MyRequest As Object 
Dim Val 
httpString = "http://localhost:8888/test.cfm" 

Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 

MyRequest.Open "GET", httpString 

' Send Request. 
MyRequest.Send 

MsgBox MyRequest.ResponseText 

'now pass in the session urltoken we have just retreived 

MyRequest.Open "GET", httpString & "?urltoken=" & MyRequest.ResponseText 

' resend a request, this time with the urltoken. 
MyRequest.Send 

'take a look and see if the session variables are correct 
MsgBox MyRequest.ResponseText 

End Sub 
एक test.cfm

<cfif isdefined("URL.urltoken")> 
    <cfset session.urltoken="#URL.urltoken#"> 
    <cfelse> 
    <cfset session.username="bob"> 
</cfif> 


<cfoutput>session.urltoken="#session.urltoken#"</cfoutput><br> 
<cfoutput>session.username="#session.username#"</cfoutput><br> 
<cfoutput>session.sessionID="#session.sessionID#"</cfoutput> 

ठीक है कि अब काम करता है, दिलचस्प में

में एक ही मुद्दा है, मैं वेब सेवा या http के लिए याद करने की आवश्यकता होगी कॉल ब्राउज़र का उपयोग नहीं करने के लिए मुझे URL में मैन्युअल रूप से sessionID को पास करने की आवश्यकता होगी।

+0

क्या आप अपना वीबीए कोड दिखा सकते हैं? – Antony

उत्तर

2

निश्चित रूप से ब्राउज़र कुकी पर आधारित सत्र बनाए रखा गया। ब्राउज़र सर्वर से पहले अनुरोध पर टोकन असाइन करें और यह शेष अनुरोध में सत्र कनेक्शन बनाने के लिए उपयोग किया जाएगा। यदि ब्राउज़र कुकीज़ अक्षम हैं तो आपको प्रत्येक अनुरोध के लिए यूआरएल में सीएफआईडी और सीएफटीओकेएन पास करने की आवश्यकता हो सकती है और जे 2 सत्र सत्र के मामले में आपको jsessionId भी पास करने की आवश्यकता हो सकती है (सत्र में संलग्न करने का सबसे अच्छा तरीका है। प्रत्येक अनुरोध में URLToken।)

शब्द मैक्रो में आपको नया jsessionId मिलता है क्योंकि शब्द में कुकी नहीं हो सकती है और कनेक्शन जारी रखने में सक्षम नहीं है, लेकिन बस सत्र को सम्मिलित करने का प्रयास करें। अगले वेबसाइट सेवा कॉल में URL टोकन और आप शब्द को दोबारा खोलने के बाद भी अपना पूरा सत्र वापस प्राप्त करेंगे या आप कोशिश भी कर सकते हैं कॉपी सत्र.URL क्रोम ब्राउज़र अनुरोध से टोकन और इसे फ़ायरफ़ॉक्स अनुरोध में संलग्न करें और आपको क्रोम में एक ही सत्र उपलब्ध होगा (यदि आप अलग-अलग कंप्यूटर से भी कोशिश कर रहे हैं तो वही काम काम करेगा)।

तो कहानी का नैतिकता सीएफआईडी, सीएफटीओकेएन, जेएसशनआईडी (जे 2 सत्र प्रबंधन के मामले में) का उपयोग क्लाइंट और सर्वर के बीच कनेक्शन के लिए यूआरएल या कुकी के माध्यम से कनेक्शन के लिए किया जाता है।

+0

मुझे इस बात के बारे में परेशान किया गया है कि कुकी/सत्र की जानकारी जहां कई (या नहीं) ब्राउज़र स्थापित हैं और उदाहरण के लिए किस प्रारूप में, जब कोई ब्राउज़र सेवा खोलने के साथ वेब सेवा कॉल तक पहुंच नहीं है। कोई सुझाव मैं कैसे पता लगा सकता हूं? – Saul

+0

@Saul, जानकारी दोनों तरफ सर्वर और क्लाइंट में सहेजी गई। कोई ब्राउज़र या कुकी अक्षम होने के मामले में यह केवल सर्वर पर स्टोर करेगा लेकिन यह प्रतिक्रिया शीर्षलेख के साथ स्थानांतरित कर देगा। मुझे यकीन नहीं है कि आप जहां काम कर रहे हैं, उस शब्द में प्रतिक्रिया शीर्षलेख कैसे प्राप्त करें, लेकिन आप एक और webservice कह सकते हैं जो URLtoken का अनुरोध करता है जिसे बाद में आप अन्य वेबसर्विस अनुरोध के साथ जोड़ सकते हैं .. उम्मीद है कि मैं आपके प्रश्न को उचित ठहराने में सक्षम हूं। –

+0

यह मेरे लिए पहले नहीं हुआ था क्योंकि मुझे वेबपृष्ठ/ब्राउज़र के माध्यम से सीएफसी तक पहुंचने के लिए उपयोग किया जाता है कि यदि सीआरसी के लिए वेब सेवा के रूप में दूरस्थ पहुंच है तो मुझे सत्र में "मैन्युअल रूप से" पास करना होगा यदि मैं चाहता हूं कि यूआरएल में सत्र स्कोप का उपयोग करें। – Saul

संबंधित मुद्दे