2012-03-05 12 views
7

काफी सरल कोड बचाया जा नहीं लग रहे हैं:सत्र चर

<? 
session_start(); 
$_SESSION['t'.time()]  = "ok"; 
echo "<pre>".print_r($_SESSION, 1)."</pre>"; 
?> 

शो, उम्मीद के रूप में, 3 पेज पुनः लोड के बाद की तरह

Array 
(
    [t1330966834] => ok 
    [t1330966835] => ok 
    [t1330966836] => ok 
) 

कुछ।

के कुछ प्रतीकों बदल डालते हैं:

$_SESSION[time()]  = "ok"; 

(अब 'टी' के बिना) और मैं के बाद की तरह

Array 
(
    [t1330966834] => ok 
    [t1330966835] => ok 
    [t1330966836] => ok 
    [1330967020] => ok 
    [1330967021] => ok 
    [1330967022] => ok 
    [1330967023] => ok 
) 

कुछ पुनः लोड कुछ उम्मीद लेकिन असल में परिणाम बिल्कुल अलग है:

Array 
    (
     [t1330966834] => ok 
     [t1330966835] => ok 
     [t1330966836] => ok 
     [1330967020] => ok 
    ) 

हमारे पास 3 पिछली सरणी कोशिकाएं विज्ञापन हैं और केवल एक 'समय' सेल - कोई फर्क नहीं पड़ता कि कितने ti mes आप पेज को फिर से लोड करें। समय सही है, यह प्रत्येक सेकेंड को अलग करता है लेकिन 'टी' के बिना केवल एक सेल! इसके अलावा, मैं

$t =time(); 
$_SESSION[$t]  = "ok"; 

और यहां तक ​​कि

$t =intval(time()); 
$_SESSION[$t]  = "ok"; 

की कोशिश की लेकिन यह है समय के साथ केवल एक सेल बनी हुई है।

2 अलग-अलग सर्वरों पर PHP 5.2.13 और 5.3.10 पर परीक्षण किया गया। मैं क्या गलत कर रहा हूँ?

+0

दोनों' $ _SESSION [ 't'.time()] =' ठीक बताए प्रयास करें '; $ _SESSION [समय()] =' ok'' और देखो क्या होता है। 't' संस्करण दिखते रहते हैं और नंगे समय का संस्करण नहीं होता है, तो कुछ अजीब चल रहा है। –

+0

मुझे इस प्रश्न का उत्तर देने के लिए PHP सत्र चर की विषमताओं के बारे में पर्याप्त जानकारी नहीं है, लेकिन जब आप 't' यह एक स्ट्रिंग इंडेक्स की बजाय एक संख्यात्मक सूचकांक बन जाता है। शायद PHP केवल सत्र चर या कुछ में एक संख्यात्मक अनुक्रमणिका संग्रहीत करता है? सुनिश्चित नहीं है, लेकिन ऐसा लगता है कि इसके साथ कुछ करने के लिए कुछ है। – Travesty3

उत्तर

6

$_SESSION साहचर्य सरणी में कुंजी यानी वे एक संख्या के साथ प्रारंभ नहीं कर सकता और किसी अक्षर से प्रारंभ या अंडरस्कोर चाहिए PHP में नियमित रूप से चर नाम, रूप में एक ही सीमाओं के अधीन हैं। अधिक जानकारी के लिए इस मैनुअल में चर पर अनुभाग देखें।

http://php.net/manual/en/session.examples.basic.php

5

जब रास्ता error_reporting बन रहे, तो आप इस नोटिस देना चाहिए:

सूचना < में फ़ाइल>, लाइन ...: session_write_close(): छोड़ा जा रहा है संख्यात्मक कुंजी 1330967020

सत्र चर के लिए संख्यात्मक indeces not supported हैं।

2

यह अजीब चीज़ नहीं है। यह बस संख्यात्मक कुंजी छोड़ रहा है। यदि आप नोटिस को प्रदर्शित करने में सक्षम हैं, तो आप यह त्रुटि देख सकते हैं।

जैसा कि this पर php.net पर टिप्पणी के अनुसार बताया गया है। सत्र में मूल्यों को परिभाषित करने के लिए आपको संख्यात्मक कुंजी का उपयोग नहीं करना चाहिए।

उद्धरण

सावधान $ _SESSION सरणी (जैसे $ _SESSION [0] = 1 के रूप में;) करने के लिए एक कुंजी के रूप में पूर्णांक इस्तेमाल करने की कोशिश करने के लिए नहीं है या आप त्रुटि प्राप्त होगी "नोटिस: अज्ञात: लंघन संख्यात्मक कुंजी 0।लाइन 0 "पर अज्ञात में

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