2014-07-25 4 views
5

को अनदेखा कर रहे हैं, मैं एक ही ब्राउज़र सत्र से उत्पन्न एक साथ दो अनुरोधों की सेवा करने की कोशिश कर रहा हूं।PHP सत्र अवरुद्ध कर रहे हैं, session_write_close

निम्नलिखित न्यूनतम उदाहरण पर विचार करें:

<?php 

session_start(); 

$sessionId = session_id(); 

session_write_close(); 

$file = sys_get_temp_dir() . '/lock_test'; 

if (!file_exists($file)) { 

    touch($file); 

    sleep(5); 

    unlink($file); 

    echo 'done! ' . $sessionId; 

} else { 

    echo 'locked! ' . $sessionId; 

} 

दूसरा अनुरोध "बंद" उत्पादन में परिणाम चाहिए लेकिन यह हमेशा पूरा करने वाले पहले अनुरोध के लिए इंतजार कर रहा है और उसके बाद "हो गया" आउटपुट।

Xdebug नहीं चल रहा है। PHP संस्करण 5.5 है।

संपादित करें:

वोटिंग डुप्लीकेट के रूप में इस बंद हुआ। जुड़े प्रश्न से पता चलता है कि इस मुद्दे को हल करने के लिए, एक यादृच्छिक चर जोड़ें। तो मैं एक अनुरोध समय चर जोड़ने और microseconds के साथ एक टाइमस्टैम्प में स्थापित करने का सुझाव दूंगा।

+0

आप अनुरोध कैसे कर रहे हैं? – PeeHaa

+0

ब्राउज़र से स्क्रिप्ट को हिट करें। माना जाता है कि इस विधि का उपयोग कई अजाक्स अनुरोधों को सुविधाजनक बनाने के लिए किया जा सकता है जब तक कि वे बिना किसी के लिए एक दूसरे को अवरुद्ध कर सकें। – bcmcfc

+0

क्या आपने फ़ाइल IO को हटाने का प्रयास किया है (केवल सत्र प्रारंभ/बंद नींद और गूंज छोड़कर)? – Vatev

उत्तर

0

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

+0

लेकिन मैं स्पष्ट रूप से session_write_close को कॉल कर रहा हूं, जो अनिवार्य रूप से मुझे कह रहा है "ठीक है, मुझे यह सत्र फ़ाइल से जो चाहिए है, उसे प्राप्त करने की आवश्यकता नहीं है या इसे फिर से पढ़ना आवश्यक नहीं है"। – bcmcfc

+0

ठीक है, समझा। आपकी उम्मीद मान्य है। इसकी जांच करने की आवश्यकता होगी। – hek2mgl

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