2012-04-10 43 views

Trả lời

35

isset thường là cách thích hợp để kiểm tra xem biến xác định trước hiện đang định nghĩa:

Nếu bạn đang sử dụng một phiên bản của php trước 5.4,

bạn thường có thể nhận được ngay với và hấp dẫn của nó chỉ cần làm mã bên dưới, nhưng lưu ý rằng nếu một số phiên lý do bị vô hiệu hóa, session_start() sẽ vẫn được gọi có thể dẫn đến lỗi và không cần gỡ lỗi vì mảng $ _SESSION không được phép tạo.

if(!isset($_SESSION)){session_start();} 

nếu bạn muốn kiểm tra xem liệu phiên có bị vô hiệu vì lý do nào không, bạn có thể tắt thông báo lỗi, đặt biến phiên thử nghiệm, sau đó xác minh biến được đặt. Nếu không, bạn có thể mã hóa phản ứng cho các phiên bị vô hiệu hóa. Bạn sẽ muốn làm tất cả điều này tại hoặc gần đầu của kịch bản của bạn. Vì vậy, như một ví dụ (các công trình khác nhau tùy thuộc vào thiết lập xử lý lỗi):

if(!isset($_SESSION)){session_start();} 
$_SESSION['valid'] = 'valid'; 
if($_SESSION['valid'] != 'valid') 
{ 
    //handle disabled sessions 
} 

Tuy nhiên, nếu bạn đang sử dụng php phiên bản 5.4 hoặc cao hơn,

Bạn có thể sử dụng session_status() chức năng, một lựa chọn tốt hơn như nó chiếm các phiên bị vô hiệu hóa và kiểm tra xem phiên đã tồn tại chưa.

if (session_status() === PHP_SESSION_NONE){session_start();} 

Chú ý rằng PHP_SESSION_NONE là một tập hợp liên tục bằng PHP và do đó không cần phải được bao bọc trong dấu ngoặc kép. Nó đánh giá đến số nguyên 1, nhưng như là một hằng số được thiết lập đặc biệt để loại bỏ sự cần thiết của các số ma thuật, tốt nhất để kiểm tra so với hằng số.

+0

cảm ơn vì đã đề cập đến một giải pháp cho php <5.4 – Houston

+0

@ tốt, tôi muốn nói rằng bạn đã tìm thấy lỗi trong 5.4.16 hoặc nhiều khả năng có cấu hình máy chủ/php lạ. Dù bằng cách nào nó tốt để kbow trường hợp có thể cạnh của họ: D – Rooster

7

Nhiều người chỉ cần sử dụng @session_start() để chặn cảnh báo rằng phiên đã bắt đầu. Giải pháp thay thế thường là:

if (session_status() === PHP_SESSION_NONE) session_start(); 
1
if (session_id() === "") { session_start(); } 
3

thử tình trạng này

if (version_compare(phpversion(), '5.4.0', '<')) { 
if(session_id() == '') { 
    session_start(); 
} }else{ 
if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} } 

Nếu bạn chỉ muốn tránh lỗi này, sử dụng @ trước khi chức năng dụ:

@session_start(); 
+0

Xin chào, chào mừng đến với SO. Bạn có thể vui lòng chỉnh sửa bài đăng của mình để giải thích mã của bạn hoạt động không và cách giải quyết vấn đề của OP? Các câu trả lời chỉ có mã không được khuyến khích và có thể bị xóa. –

0

Kiểm tra cho phiên hiện tại trước khi bắt đầu mới:

// # if phpversion() is >= 5.4 
    if(phpversion() >= 5.4) { 

    // # check session_status() function for value 'PHP_SESSION_NONE' 
    if(session_status() === PHP_SESSION_NONE) { 
     session_start(); 
    } 

    } else { // # maintain backwards compat. with PHP versions older than 5.4 

     // # if $_SESSION object if NOT set, start a new session! 
     if(!isset($_SESSION)) { 
     session_start(); 
     } 
    } 
Các vấn đề liên quan