2010-05-18 9 views
5

किसी साइट पर लॉग इन करना मैं अपनी स्थानीय मशीन पर अपेक्षित कार्यों पर काम कर रहा हूं लेकिन दूरस्थ सर्वर पर विफल रहता है लेकिन केवल इंटरनेट एक्सप्लोरर में विफल रहता है। किकर यह है कि यह आईई में स्थानीय रूप से काम करता है, बस रिमोट मशीन पर नहीं।सत्र चर सेट नहीं हो रहे हैं, लेकिन केवल इंटरनेट एक्सप्लोरर में हैं और सभी मशीनों पर नहीं

दुनिया में क्या इसका कारण बन सकता है? मैंने रिमोट मशीन पर कोड के माध्यम से कदम रखा है और डेटाबेस में दर्ज किए गए लॉगिन किए गए लॉगिन मान देख सकते हैं, वे पाए जाते हैं और फिर एक लॉगिन फ़ंक्शन कहा जाता है। यह दो $ _SESSION चर सेट करता है और मुख्य व्यवस्थापक पृष्ठ पर रीडायरेक्ट करता है। हालांकि, केवल आईई में (और स्थानीय मशीन पर नहीं चलते ... यह महत्वपूर्ण है) जब आप मुख्य व्यवस्थापक पृष्ठ पर जाते हैं तो $ _SESSION चर मौजूद नहीं होते हैं। var_dump($_SESSION) मुझे हर ब्राउज़र पर क्या उम्मीद है जब मैं अपने स्थानीय वातावरण में और आईई 6, 7 और 8 को छोड़कर प्रत्येक ब्राउज़र में रिमोट सर्वर पर चलाता हूं (जहां मुझे शून्य मान मिलता है जैसे कि $ के लिए कुछ भी सेट नहीं किया गया है _SESSION)।

यह वास्तव में मुझे स्टंप किया गया है इसलिए किसी भी सलाह की सराहना की जाती है।

एक उदाहरण के लिए ... IE में, स्थानीय रूप से चलाने के लिए, var_dump मुझे देता है: दूरस्थ सर्वर पर

array 
'Username' => string 'theusername' length=11 
'UserID' => string 'somevalue' length=9 

भागो (केवल आईई ... ठीक दूसरे ब्राउज़र में काम) var_dump मुझे देता है:

array(0){} 

संहिता (एक न्यूनतम उदाहरण ... वास्तव में एक कोड उदाहरण इस मुद्दे के साथ की जरूरत नहीं है, हालांकि):

$User = GetUser($Username, $Password); 
    if ($User->UserID <> "") { // this works so we call Login()... 
     Login($User); // this also works and gives expected results. on to redirect... 
     header("Location: index.php"); // a var_dump at index.php shows that there is no session data at all in IE, remotely. 
    } else { 
     header("Location: login.php"); 
    } 


function Login($data) { 
     $_SESSION['Username'] = $data->Username; 
     $_SESSION['UserID'] = $data->UserID; 
// a var dump here gives the expected data in every browser 
    } 

संपादित करें: इसे हल किया गया। यह तथ्य था कि परीक्षण सर्वर पर डोमेन नाम में अंडरस्कोर था। कोई विचार नहीं कि इसके लिए Google के पास समय क्यों नहीं है और अंडरस्कोर, कुछ_client.ourcompany.com जैसी कुछ नाम है, समस्या थी। इंटरनेट एक्सप्लोरर से प्यार होना चाहिए ... यह एक निष्क्रिय आक्रामक सह-कार्यकर्ता की तरह है जिसे आप आसानी से नहीं बचा सकते हैं।

+0

हमारे लिए कोड नमूना देखने के लिए? –

+0

क्या आपने प्रत्येक पृष्ठ के शीर्ष पर 'session_start();' शामिल किया था? – Alec

+0

क्या आपने session_start() शामिल किया था; प्रत्येक पृष्ठ के शीर्ष पर? हां। – Stuart

उत्तर

2

के लिए बहुत धन्यवाद धन्यवाद इसे खोजने के लिए इसे आसान बनाने के लिए इसे एक उत्तर (उपयोगकर्ता tuzo द्वारा सुझाया गया) में डाल दिया गया है। इसे हल किया यह तथ्य था कि परीक्षण सर्वर पर डोमेन नाम में अंडरस्कोर था।कोई विचार नहीं कि इसके लिए Google के पास समय क्यों नहीं है और अंडरस्कोर, कुछ_client.ourcompany.com जैसी कुछ नाम है, समस्या थी। इंटरनेट एक्सप्लोरर से प्यार होना चाहिए ... यह एक निष्क्रिय आक्रामक सह-कार्यकर्ता की तरह है जिसे आप आसानी से नहीं बचा सकते हैं।

किसी अन्य SO उत्तर से लिया गया ... बताता है कि क्या हो रहा है: क्या उपडोमेन में से कोई अंडरस्कोर का उपयोग करता है? आईई में सबडोमेन से कुकीज़ स्वीकार करने में समस्याएं हैं जो यूआरआई आरएफसी का पालन नहीं करती हैं। (http://www.ietf.org/rfc/rfc2396.txt)

0

session_start() डालने का प्रयास करें; ।

$_SESSION['SESSION_NAME'] = 'sessionValue'; 
+1

ओपी के रास्ते में क्या गलत है? अगर यह हर ब्राउज़र में काम करता है लेकिन आईई (एस) में वह स्पष्ट रूप से प्रत्येक पृष्ठ में 'session_start() 'शामिल है ... –

1

चेक अपने php.ini फ़ाइल में session.cookie_domain का मूल्य: पेज के शीर्ष पर आप में सत्र बना रहे हैं और यदि आप सत्र आवंटित की जांच सही तरीके से वार्स। यदि वह मान सेट किया गया है, तो सुनिश्चित करें कि आप यही चाहते हैं। यह सबसे बड़ी बात है जिसके बारे में मैं सोच सकता हूं कि स्थानीय रूप से बनाम दूरस्थ रूप से व्यवहार कर सकता है।

इसके अलावा, यदि आपके पास session.cookie_lifetime पर कोई मान सेट है, तो अपने php.ini में उस पंक्ति को टिप्पणी करने का प्रयास करें। मैंने आईई के साथ कुछ अनोखा व्यवहार देखा जब मैंने वहां एक मूल्य गिरा दिया।

यहां एक त्वरित सत्र परीक्षक है। यदि आप पेज को फिर से लोड करते हैं और टोकन के लिए नए मान देखते रहते हैं, तो आपको लगातार सत्र नहीं मिल रहा है। फिर आप निश्चित रूप से सर्वर/PHP कॉन्फ़िगरेशन को दोष दे सकते हैं, न कि आपका कोड।

<?php 
session_start(); 
if (!isset($_SESSION['token'])) { 
    $_SESSION['token'] = sha1(uniqid(rand(), true)); 
} 

if (!empty($_POST)) { 
    $_SESSION['hi'] = preg_replace('/[^\w ]+/','',$_POST['hi']); 
    header("Location: index.php"); 
    exit; 
} 

?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Session test</title> 
</head> 
<body> 

<h1>How's that session doing?</h1> 
<p>Message: <?=htmlspecialchars($_SESSION['hi'])?></p> 
<p>Token: <?=htmlspecialchars($_SESSION['token'])?></p> 


<form action="index.php" method="post"> 
<fieldset> 
    <label for="hi">What do you have to say?</label> 
    <input type="text" name="hi" id="hi"> 
    <input type="submit" value="Submit"> 
</fieldset> 
</form> 

</body> 
</html> 
1

यह बिल्कुल सच है "यह सच है कि परीक्षण सर्वर पर डोमेन नाम में यह एक अंडरस्कोर था"। यह पोस्ट एक ही समस्या को हल करने के लिए 3 घंटे से अधिक समय व्यतीत करने के बाद पाया गया था। Gaoshan88

0

हमारे पास एक ही समस्या है, हालांकि यह सर्वर नाम वर्ण नहीं था लेकिन सर्वर का समय सही नहीं था। इससे आईई में हमारी सत्र कुकीज़ तुरंत अमान्य हो गईं, जबकि यह अन्य ब्राउज़रों पर काम करती थी।

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