2009-11-24 45 views
18

Tôi có một tập lệnh của bên thứ ba và đã tự hỏi làm thế nào tôi có thể kiểm tra với PHP nếu session_start() đã được khai báo trước khi làm điều gì đó?Làm cách nào để kiểm tra xem session_start đã được nhập chưa?

something like if(isset($_session_start())) { //do something } 
+1

bản sao có thể có của [Kiểm tra nếu phiên được bắt đầu] (http://stackoverflow.com/questions/3357740/test-if-session-is-started) –

+9

Có, nhưng điều này đã được hỏi 3 năm trước. Câu hỏi đó được hỏi 2 năm trước. –

+0

Tham khảo [Kiểm tra xem phiên PHP đã bắt đầu] chưa (https://stackoverflow.com/q/6249707/6521116) –

Trả lời

2
if(isset($_SESSION)) { 
    // do something 
} 
13

Tôi cho rằng bạn có thể sử dụng session_id chức năng:

session_id() returns the session id for the current session or the empty string ("") if there is no current session (no current session id exists).

Hoặc có thể thử nghiệm xem $_SESSION được thiết lập hay không, với isset, có thể làm các trick, vì nó không nên được thiết lập khi không có phiên nào được bắt đầu - bạn chỉ phải hy vọng rằng không có gì chỉ định bất kỳ điều gì cho $_SESSION mà không bắt đầu phiên trước.

1
function session_started(){ return !!session_id(); } 
+3

Don không quá thông minh;). Tôi thích 'return (session_id()! == "")'. – middus

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

Vui lòng cung sẽ cho phép bạn để giữ cho phiên hiện tại của bạn hoạt động ngay cả khi đó là một vòng lặp lại ứng dụng trình mà bạn có kế hoạch để tái sử dụng biểu mẫu nếu dữ liệu được đánh máy không đúng cách hoặc có thêm các kiểm tra và cân bằng trong chương trình của bạn trước khi tiếp tục chương trình tiếp theo.

+8

tôi khuyên bạn nên sử dụng 'if (session_id() == '')', vì '$ _SESSION' có thể được đặt trong khi phiên được đóng. – Ragnagord

+0

Đúng, nhưng tất cả $ _SESSION ['variables'] được đặt thành null khi phiên bắt đầu. Ngoài ra, session_id() s là các giá trị cookie phía máy khách. Tùy thuộc vào nhà phát triển cách dữ liệu phiên được sử dụng. – Maarek

+0

@Maarek Mỗi lần 'session_start()' được gọi, các biến phiên KHÔNG được đặt là null. Và khi một phiên được đóng lại (bằng cách thoát khỏi tập lệnh hoặc bằng cách gọi 'session_write_close()') dữ liệu phiên vẫn còn tồn tại. Trong những trường hợp như vậy, séc của bạn không đủ, vì nó sẽ không khởi động lại phiên đã đóng. – Stefan

-1

    if(defined('SID')) 
     // do 
25

Như trong PHP> = 5.4.0, bạn có chức năng session_status() cho bạn biết nếu nó đã được khởi tạo hay không hoặc nếu nó bị vô hiệu hóa.

Ví dụ, bạn có thể làm:

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

Bạn có thể đọc thêm về nó trong http://www.php.net/manual/en/function.session-status.php

7

cho php> = 5.4.0

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

cho php < 5.4.0

if(session_id() == '') { 
session_start(); 
} 
+1

Đây là phương pháp được khuyến nghị. [http://www.php.net/manual/en/function.session-status.php](http://www.php.net/manual/en/function.session-status.php) –

+0

Lưu ý rằng <5.4.0 giải pháp là khá nhiều vô dụng. session_id() sẽ luôn trả về một chuỗi rỗng cho đến khi session_start() được gọi. Nó được gọi là mọi lúc. –

0

Nếu phiên đã bắt đầu, Lỗi: "Fatal error: Không thể sử dụng giá trị trả về hàm trong bối cảnh ghi"

Hãy thử điều này:

$session = session_id(); 
if(empty($session)){ 
    session_start(); 
} 
0

tôi chỉ viết một chức năng đơn giản cho nó.

function isSessionStart() 
    { 
    if (version_compare(phpversion(), '5.4.0', '<')) { 
     if(session_id() == '') { 
     return false; 
     } 
     return true; 
    } 
    else { 
     if (session_status() == PHP_SESSION_NONE) { 
     return false; 
     } 
     return true; 
    } 
    } 
0

cách làm việc tốt nhất cho tôi! nếu (session_status()! = 1) session_start();

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