मेरा मानना है कि इस article'll उपयोगी हो: http://www.how2guru.com/archives/php-session-problem-while-using-iframe/
संक्षिप्त उत्तर है:
header('P3P: CP="CAO PSA OUR"');
session_start();
संपादित करें:
सोचा iframe में, इस तरह सत्र शुरू मुझे यह जवाब अपडेट करना चाहिए, क्योंकि मैंने कुछ रोचक चीज़ों पर ठोकर खाई है, जिसे हर किसी को पता होना चाहिए।
यह पी 3 पी हेडर हैक सफारी पर काम नहीं करता है।
नीचे मैं अपने लॉगिन प्रवाह का वर्णन करता हूं, और मैंने इस समस्या को कैसे हल किया।
मेरे प्रवेश प्रवाह को इस (पेज एप्लिकेशन) की तरह दिखता है:
- पता चल सके कि वर्तमान उपयोगकर्ता एक सत्र है,
- यदि नहीं, तो लॉगिन यूआरएल (PHP एसडीके द्वारा उत्पन्न) को अनुप्रेषित,
- लॉगिन संवाद एक यूआरएल पर वापस रीडायरेक्ट करता है, जहां मैं 'कोड' जीईटी पैरामीटर फेसबुक का उपयोग करता हूं, मुझे एक्सेस टोकन प्राप्त करने के लिए देता है, जिसे मैं बाद में उपयोग के लिए स्टोर कर सकता हूं। (सत्र में डीबी और पर सहेजा जा रहा है।) यदि मैं इसके साथ कर रहा हूं, तो मैं उपयोगकर्ता को अपने पेज ऐप पर रीडायरेक्ट करता हूं, जहां सबकुछ काम करेगा।
- हर किसी को इस बिंदु पर खुश होना चाहिए।
लेकिन यहां गॉचा आता है।
एक उपयोगकर्ता सफारी का उपयोग करता है, और इस एप्लिकेशन को जब सत्र पहले से ही नष्ट कर दिया गया (। कुछ दिनों के बाद पूर्व के लिए) खोलने के लिए कोशिश करता है, तो निम्न बात क्या होगा: एक सत्र के लिए
- कोड चेकों : यह उपयोगकर्ता आईडी (PHP एसडीके getUser() विधि) पाता है, इसलिए मैं पहले डेटाबेस में एक प्रविष्टि की जांच करता हूं।
- चूंकि उपयोगकर्ता पहले से लॉग इन हुआ था, उसके पास डेटाबेस में एक प्रविष्टि है, इसलिए मैं इसे अभी पकड़ता हूं और इसे एक सत्र में सहेजता हूं, ताकि भविष्य में AJAX कॉल की सभी आवश्यक जानकारी हो।
यहां ध्यान देने योग्य महत्वपूर्ण बात यह है कि यह कोड किसी आईफ़्रेम के भीतर एक पृष्ठ टैब में चलता है।
तो अधिकांश उपयोगकर्ताओं के लिए कोड काम करेगा, पी 3 पी हेडर हैक की वजह से कोड काम करेगा।
लेकिन सफारी उपयोगकर्ताओं के लिए यह नहीं होगा।
सफारी दिए गए शीर्षलेख की परवाह नहीं करता है, यह सत्र को सहेजने से इंकार कर देता है, इसलिए उपयोगकर्ता ऐप में लॉग इन करता है, सबकुछ ठीक काम करता प्रतीत होता है, लेकिन AJAX कॉल काम नहीं करेंगे, क्योंकि वे ' के साथ काम करने के लिए कोई सत्र नहीं है।
वैकल्पिक हल:
काफी वास्तव में सरल - हालांकि बहुत सुंदर नहीं है, लेकिन हे, यह काम करता है। -: मैं जांचता हूं कि क्लाइंट ब्राउज़र सफारी है या नहीं, और यदि ऐसा है, तो मैं एक कस्टम यूआरएल पर रीडायरेक्ट करता हूं, जहां मैं सत्र शुरू करता हूं - फेसबुक iframe के बाहर - फिर ऐप पर रीडायरेक्ट करें।
यह बिना किसी समस्या के कुकी बना देगा, इसलिए सत्र उपलब्ध होंगे।
सत्र (Credit goes to this guy)
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') && !strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome')) {
if (count($_COOKIE) === 0) {
echo '<script>
top.location = "http://www.domain.com/setcookie.php";
</script>';
}
}
सत्र की स्थापना (setcookie.php)
header('P3P: CP="CAO PSA OUR"');
session_start();
$_SESSION = array();
echo
'<script>
top.location = "http://back-to-the-facebook-app.com";
</script>';
जाँच हो रही है:
यहाँ कुछ कोड है
मुझे आशा है कि यह अतिरिक्त चाल किसी की मदद करेगी।
EDIT2
मैं अभी तक इस एक बाहर की कोशिश नहीं की, लेकिन इसके बजाय पी 3 पी हेडर को जोड़े की, तो आप सिर्फ अपने लिए निम्नलिखित लाइनों जोड़ सकते हैं।इनको:
<IfModule mod_headers.c>
Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
</IfModule>
टिप्पणियों के साथ :
# ------------------------------------------------------------------------------
# | Cookie setting from iframes |
# ------------------------------------------------------------------------------
# Allow cookies to be set from iframes in IE.
# http://msdn.microsoft.com/en-us/library/ms537343.aspx
# http://www.w3.org/TR/2000/CR-P3P-20001215/
<IfModule mod_headers.c>
Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
</IfModule>
सभी क्रेडिट इस Yeoman परियोजना के पीछे लोगों के लिए कोड .htacces के लिए चला जाता है।
यदि आपके पास iframes पृष्ठ पर session_start() है, तो आपको कोई समस्या नहीं होनी चाहिए। – Chibuzo
मुझे कुकी-आधारित सत्रों में समस्या आई है जो मेरे आईफ्रेम में काम नहीं कर रहा है। ऐसा इसलिए था क्योंकि जिस ब्राउज़र के साथ मैं परीक्षण कर रहा था वह ** तृतीय पक्ष कुकीज़ ** अक्षम था। –