2012-03-05 32 views
7

Khá đơn giản:biến Session dường như không được cứu đang

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

chương trình, như mong đợi, một cái gì đó giống như

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

sau 3page tải lại.

Hãy thay đổi một vài biểu tượng:

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

(bây giờ không 't') và tôi hy vọng sau vài load lại cái gì đó như

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

Nhưng trên thực tế kết quả là hoàn toàn khác nhau:

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

Chúng tôi có 3 ô mảng trước đó quảng cáo một và chỉ một ô 'thời gian' - bất kể có bao nhiêu ti mes bạn tải lại trang. Thời gian là chính xác, nó khác nhau mỗi giây nhưng chỉ có một ô không có 't'! Ngoài ra tôi đã cố gắng

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

và thậm chí

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

Nhưng nó vẫn chỉ có một tế bào theo thời gian.

Thử nghiệm tại php 5.2.13 và 5.3.10 tại 2 máy chủ khác nhau. Tôi đang làm gì sai?

+0

Hãy thử gán cả hai' $ _SESSION ['t'.time()] =' ok '; $ _SESSION [time()] =' ok'' và xem điều gì xảy ra. 't' phiên bản tiếp tục hiển thị và phiên bản baretime không, sau đó một cái gì đó kỳ lạ đang xảy ra –

+0

Tôi không biết đủ về những kỳ quặc của biến phiên PHP để trả lời câu hỏi này, nhưng khi bạn đưa ra' t' Nó có thể là một chỉ số dạng số thay vì chỉ mục chuỗi Có lẽ PHP chỉ lưu trữ một chỉ mục số trong các biến phiên hoặc một cái gì đó không chắc chắn, nhưng dường như điều này có liên quan đến nó. – Travesty3

Trả lời

6

Các khóa trong $_SESSION mảng kết hợp có cùng giới hạn như tên biến thông thường trong PHP, nghĩa là chúng không thể bắt đầu bằng số và phải bắt đầu bằng chữ cái hoặc dấu gạch dưới. Để biết thêm chi tiết, xem phần về các biến trong hướng dẫn này.

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

5

Khi cranking error_reporting con đường lên, bạn sẽ nhận thấy điều này:

Lưu ý trong < file>, dòng ...: session_write_close(): Bỏ qua số chủ chốt 1330967020

Phân số cho các biến phiên là not supported.

2

Đây là không phải là điều lạ. Nó chỉ đơn giản là bỏ qua các phím số. Bạn có thể thấy lỗi này, nếu bạn đã bật thông báo được hiển thị.

Như đã đề cập trên this nhận xét về php.net. Bạn không nên sử dụng các phím số để xác định các giá trị trong phiên.

Trích

Cẩn thận không để cố gắng sử dụng số nguyên như một chìa khóa để các mảng $ _SESSION (như $ _SESSION [0] = 1;) hoặc bạn sẽ nhận được lỗi "Thông báo: Unknown: Bỏ qua phím số 0.trong Không xác định trên dòng 0 "

Các vấn đề liên quan