2012-01-18 15 views
7

में कोई PHPSESSID नहीं है, मुझे अपने PHP/Ajax ऑनलाइन शॉपिंग कार्ट पर SESSION चर के साथ कुछ अजीब समस्याएं आ रही हैं।

जब मैं पहली बार पृष्ठ देखता हूं, तो सत्र बनाया जाता है और पृष्ठ के भीतर काम करता है। फिर जब मैं एक ही निर्देशिका में किसी अन्य PHP पृष्ठ पर नेविगेट करता हूं तो सत्र पूरी तरह से खो जाता है। अजीब बात यह है कि यह केवल होता है। एक बार जब उपयोगकर्ता पृष्ठ बदलने पर अपने सत्र को पूरी तरह से खोने की इस प्रक्रिया के माध्यम से जाता है, तो सत्र पूरे कार्ट में पूरी तरह से काम करता है।

मैंने प्रत्येक पृष्ठ दृश्य पर $ _SESSION और $ _SERVER डेटा दोनों के var_exports को मेल करना शुरू कर दिया। ऐसा लगता है कि जब कोई पृष्ठ पहली बार देखा जाता है, तो सत्र मौजूद होता है और इसमें डेटा होता है। हालांकि $ _SERVER ['HTTP_COOKIE'] चर में उत्पन्न कोई PHPSESSID नहीं है। किसी अन्य पृष्ठ पर नेविगेट करने पर, PHPSESSID बनाया जाता है और सत्र काम करना शुरू कर देगा, लेकिन पहले पृष्ठ दृश्य का प्रारंभिक सत्र डेटा खो गया है।

क्या कोई व्यक्ति PHESSESSID उत्पन्न करने का कोई तरीका है यदि कोई सत्र के लिए अभी तक उत्पन्न नहीं हुआ है? या यह सामान्य व्यवहार है और मेरे यादृच्छिक सत्र हानि की समस्या के लिए अप्रासंगिक है? मैं PHP 5.2 का उपयोग कर रहा हूँ।

गाड़ी का हर पृष्ठ में ठीक उसी तरह से शुरू होता है:

$title="Title"; 
$keywords="keywords"; 
$description="description"; 
@include('../header_cart.php'); 

और फिर header_cart.php के शीर्ष पर है:

session_start(); 
if(!isset($_SESSION['active'])){ 
    $_SESSION['active']=$_SERVER['REMOTE_ADDR']; 
} 
+0

मज़ा सभी प्रकार के पढ़ने [यहां] (http://php.net/manual/en/function.session-id.php)। मुझे नहीं पता कि आपने पहले से ही चेक आउट किया है या नहीं। क्या आप सुनिश्चित हैं कि आपका 'session_start() 'आपकी पहली कॉल पर विफल नहीं हो रहा है? – afuzzyllama

+0

कार्ट में प्रत्येक पृष्ठ एक ही हेडर फ़ाइल का उपयोग करता है, इसलिए मुझे नहीं लगता कि यह है। शायद session_regenerate_id() का उपयोग कर यदि PHPSESSID सेट नहीं है तो मदद कर सकता है। – unsunghero

+0

लेकिन फिर आप अपनी कार्ट जानकारी खो सकते हैं क्योंकि सत्र बदलता है? =/ – afuzzyllama

उत्तर

1

बाहर निकलता है यह mydomain.com और www.mydomain.com को अलग सत्र के रूप में पहचान रहा था और 2 अलग-अलग PHPSESSIDs के साथ 2 कुकीज़ संग्रहीत कर रहा था।

मैंने इसे अपनी .htaccess फ़ाइल में जोड़ा है ताकि हमेशा mydomain.com/shop को http और https दोनों के लिए www.mydomain.com/shop पर रीडायरेक्ट किया जा सके।

RewriteEngine On 

#force http://www. to make sure SESSION data is always the same 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteCond %{REQUEST_URI} shop 
RewriteRule ^(.*)$ http://www.mydomain.com/shop/$1 [R,L] 

#force https://www. to make sure SESSION data is always the same 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteCond %{REQUEST_URI} shop 
RewriteRule ^(.*)$ https://www.mydomain.com/shop/$1 [R,L] 
1

आप जाँच से पहले कोई उत्पादन है कि वहाँ है session_start() पर आपका कॉल? (यहां तक ​​कि एक सफेद अंतरिक्ष चरित्र भी नहीं!)।

किसी भी आउटपुट को फ़्लश करने के बाद HTTP शीर्षलेख भेजा नहीं जा सकता है जिससे क्लाइंट को प्रारंभिक सत्र कुकी विफल होने का प्रयास करने का प्रयास हो सकता है।

1

क्या आप http: और https: के बीच स्विच कर रहे हैं? उन्हें कभी-कभी दो अलग-अलग डोमेन के रूप में माना जाता है, और उनके बीच एक कुंजी साझा नहीं की जा सकती है।

+0

मेरे द्वारा स्विच किए जा रहे दो पृष्ठ http: // दोनों हैं। जब मैं चेकआउट पृष्ठ पर जाता हूं तो मैं https: // पर स्विच करता हूं, लेकिन सत्र दो http: // पृष्ठों के बीच खो जाता है। – unsunghero

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