मैं भी इस में चल रहा हूँ, और $_SESSION
में एक सेटिंग मेरे लिए एक विकल्प नहीं है। पीएचपी 5.3.8 के लिए: किसी भी सत्र अनुरोध के साथ शुरू कर दिया गया
- हैं, तो
define('SID')
FALSE
वापस आ जाएगी, साथ ही $_SESSION
सेट नहीं की जाती।
- यह स्वतंत्र है कि
session_id()
का उपयोग सत्र आईडी सेट करने के लिए किया गया है या नहीं।
- पहले
session_start()
के बाद, SID
परिभाषित किया गया है और $_SESSION
एक खाली सरणी पर सेट है।
session_destroy()
session_id()
को अनसेट करता है, तो यह एक खाली स्ट्रिंग है। SID
परिभाषित रहेगा (और इसके पिछले मान पर सेट करें जो एक खाली स्ट्रिंग हो सकता है)। $_SESSION
अपरिवर्तित छोड़ दिया गया है। अगली बार session_start
को रीसेट/पॉप्युलेट किया जाएगा।
इन राज्यों के साथ
, विशेष रूप से के रूप में session_id()
के बीच अगले सत्र के लिए आईडी सेट करने के लिए बुलाया जा सकता है, इसे सुरक्षित रूप से SID
, $_SESSION
और session_id()
साथ सत्र स्थिति निर्धारित करने के संभव नहीं है।
session_start()
(जैसे @
के साथ) के साथ "करने का प्रयास" वास्तव में मददगार नहीं हो सकता है, इस सत्र को स्थिति बदल जाएगा और $_SESSION
की सामग्रियों को परिवर्तित (और कुकी सेट हेडर को जोड़े यदि कुकी अनुरोध का हिस्सा नहीं था)। यह मेरे मामले में फिट नहीं था।
जब मैं परीक्षण चला रहा था, तो मैं व्यवहार में आया, कि सत्र सक्रिय होने पर आप session.serialize_handler
की आईएनआई सेटिंग बदलने की कोशिश नहीं कर सकते हैं, भले ही आप इसे एक ही मान पर सेट न करें। session.use_trans_sid
Docs के लिए भी यही सच है जो अधिक हल्का है। यह मैं निम्नलिखित समारोह के लिए नेतृत्व:
/**
* @return bool
*/
function session_is_active()
{
$setting = 'session.use_trans_sid';
$current = ini_get($setting);
if (FALSE === $current)
{
throw new UnexpectedValueException(sprintf('Setting %s does not exists.', $setting));
}
$result = @ini_set($setting, $current);
return $result !== $current;
}
जहां तक मैं देख सकता हूँ, त्रुटि सक्रिय सत्र स्थिति केवल (नहीं विकलांग) के लिए जाँच कर रहा है, तो यह एक झूठी सकारात्मक वापस नहीं जाना चाहिए जब सत्र अक्षम हैं।
इस समारोह पीएचपी 5.2 के साथ संगत पाने के लिए, यह छोटे-से संशोधन की जरूरत है:
/**
* @return bool
*/
function session_is_active()
{
$setting = 'session.use_trans_sid';
$current = ini_get($setting);
if (FALSE === $current)
{
throw new UnexpectedValueException(sprintf('Setting %s does not exists.', $setting));
}
$testate = "mix$current$current";
$old = @ini_set($setting, $testate);
$peek = @ini_set($setting, $current);
$result = $peek === $current || $peek === FALSE;
return $result;
}
कुछ sandbox।
if(!function_exists('session_status')){
function session_active(){
return defined('SID');
}
}else{
function session_active(){
return (session_status() == PHP_SESSION_ACTIVE);
}
}
यह शायद हैकी: ['session_is_active()'] (http://stackoverflow.com/questions/3788369/how-to-tell-if-a- सत्र-is-active/7656468#7656468), लेकिन कम से कम कुछ मुझे मिला। वैसे भी बग रिपोर्ट के लिए धन्यवाद, इसे 5.4 में हल करने के लिए अच्छा लगा। – hakre
अभी भी एक प्रासंगिक प्रश्न w/5.4 अतिरिक्त है, क्योंकि मैंने अभी तक 5.3 बॉक्स पर धक्का दिया है और 'session_status()' गायब पाया है! – quickshiftin
यह निश्चित रूप से विषम है, क्योंकि यह वास्तव में मेरे 5.4 निर्माण पर मौजूद है। क्या आप कह रहे हैं कि आप 5.3 या 5.4 का उपयोग कर रहे हैं? क्या यह एक कस्टम या प्रीबिल्ट PHP बाइनरी था? 'Phpinfo()' में, क्या आपके पास "सत्र" अनुभाग है? कार्रवाई में: http://codepad.viper-7.com/PiZmcw – ken