Kiểm tra PHP nếu phiên tồn tại

Trong PHP, chúng tôi sử dụng session_start() một chức năng sẵn có để bắt đầu phiên. Nhưng vấn đề mà chúng ta gặp phải trong một tập lệnh PHP là nếu chúng ta thực thi nó nhiều lần thì nó sẽ báo lỗi. Vì vậy, ở đây chúng ta sẽ tìm hiểu cách kiểm tra phiên đã bắt đầu hay chưa mà không cần gọi hàm session_start() hai lần

Có hai cách để làm theo để giải quyết vấn đề này

Đối với bên dưới PHP 5. 4. 0 phiên bản

Thí dụ

Giải trình

Nếu phiên không bắt đầu, mã này ở trên sẽ luôn bắt đầu phiên trong tập lệnh PHP

Trong phương pháp thứ hai, chúng ta có thể sử dụng hàm session_status(), trả về trạng thái của phiên hiện tại. Hàm này có thể trả về ba giá trị số nguyên, tất cả đều là các hằng số được xác định trước. đó là

  • 0 – PHP_SESSION_DISABLED. Các phiên hiện đang bị vô hiệu hóa
  • 1 – PHP_SESSION_NONE. Phiên được bật, nhưng không có phiên nào được bắt đầu
  • 2 – PHP_SESSION_ACTIVE. Phiên được bật và một phiên đã được bắt đầu

Thí dụ

Giải trình

Đoạn mã trên kiểm tra xem phiên đã bắt đầu hay chưa, nếu chưa bắt đầu, phiên này sẽ bắt đầu phiên trong tập lệnh PHP

Mặc dù giải pháp có vẻ khá đơn giản (đừng gọi nó nhiều hơn một lần), nhưng trong một số trường hợp nhất định, bạn sẽ không hoàn toàn chắc chắn liệu một phiên đã được bắt đầu hay chưa. Trong một số trường hợp, nó có thể nằm ngoài tầm kiểm soát của bạn

Có hai cách để tiếp cận điều này

Kiểm tra xem phiên có tồn tại trong các phiên bản thấp hơn 5 không. 4

Nếu bạn đang sử dụng phiên bản PHP thấp hơn 5. 4. 0, bạn có thể làm như sau

Nếu bạn chạy đoạn mã trên, bạn sẽ thấy một phiên luôn hiện diện

Điều này là do

  1. Ta kiểm tra xem hàm session_id có trả về chuỗi rỗng không
  2. Nếu hàm session_id trả về một chuỗi rỗng, thì chúng ta có thể cho rằng một phiên không tồn tại
  3. Nếu đây là trường hợp, chúng ta chỉ cần bắt đầu phiên bằng cách gọi hàm session_start

Sử dụng hàm session_status trong PHP 5. 4 trở lên

Trong phiên bản PHP 5. 4. 0 trở lên, chúng ta có thể sử dụng hàm session_status. Đúng như tên gọi, hàm này trả về trạng thái của phiên làm việc hiện tại

Hàm này có thể trả về ba giá trị số nguyên khác nhau, tất cả đều có sẵn dưới dạng hằng số được xác định trước

  • 0 – PHP_SESSION_DISABLED. Các phiên hiện đang bị vô hiệu hóa
  • 1 – PHP_SESSION_NONE. Không có phiên nào tồn tại
  • 2 – PHP_SESSION_ACTIVE. Một phiên đã tồn tại

Nếu chúng ta sử dụng session_status, mã của chúng ta sẽ như thế này

if(session_status() == PHP_SESSION_NONE){
    //session has not started
    session_start();
}

Như bạn có thể thấy, việc sử dụng chức năng này làm cho mã của bạn dễ hiểu hơn một chút

Tại sao không kiểm tra xem mảng $_SESSION có trống không?

Bạn có thể kiểm tra xem mảng $_SESSION có tồn tại và không trống không. Tuy nhiên, điều đáng chú ý là $_SESSION có thể được tạo thủ công như vậy

Trong hướng dẫn này, chúng ta sẽ xem Cách kiểm tra xem phiên đã bắt đầu chưa trong PHP. Hàm PHP session_status() và Hàm PHP session_id() có thể được sử dụng để kiểm tra xem phiên đã bắt đầu hay chưa

Mục lục

Hàm session_status() trong PHP

PHP session_status() Hàm trả về trạng thái hiện tại của phiên. Nó được sử dụng để kiểm tra phiên

Trong ví dụ này hàm session_status() được sử dụng để kiểm tra xem phiên có bắt đầu hay không

Ghi chú. Điều này là lý tưởng cho PHP 5. 4. 0 hoặc cao hơn

________0

Trong đoạn mã trên PHP_SESSION_NONE là một giá trị được trả về bởi hàm session_status(), nếu phiên được bật nhưng nó không tồn tại hoặc nó chưa được bắt đầu

Hàm session_id() trong PHP

Hàm PHP session_id() đặt hoặc trả về id của phiên hiện tại

Trong ví dụ thứ hai, Hàm session_id() được sử dụng để kiểm tra id của phiên, điều này có thể cho biết phiên đã bắt đầu hay chưa

Bạn có thể kiểm tra xem một biến đã được đặt trong phiên của người dùng hay chưa bằng cách sử dụng hàm isset(), giống như một biến bình thường. Bởi vì $_SESSION superglobal chỉ được khởi tạo sau khi session_start() được gọi, bạn cần gọi session_start() trước khi sử dụng isset() trên một biến phiên. Ví dụ


Tất nhiên, bạn cũng có thể sử dụng hàm empty() với dữ liệu phiên hoặc bất kỳ hàm nào khác - mảng $_SESSION và dữ liệu của nó có thể được sử dụng như bất kỳ mảng nào khác

Bạn muốn học PHP 7?

Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay

Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó

Làm cách nào để kiểm tra xem có phiên trong PHP không?

Luôn sử dụng session_status() , để kiểm tra xem một phiên đã bắt đầu và đang hoạt động chưa. if(session_id() === "") session_start();

Làm cách nào để kiểm tra xem phiên đã hết hạn trong PHP chưa?

Trạng thái phiên trong PHP là gì?

Hàm PHP - session_status() . Hàm session_status() trả về trạng thái của phiên hiện tại .

Hàm session_start() và Session_destroy() trong PHP là gì?

session_destroy() hủy tất cả dữ liệu được liên kết với phiên hiện tại . Nó không bỏ đặt bất kỳ biến toàn cục nào được liên kết với phiên hoặc bỏ đặt cookie phiên. Để sử dụng lại các biến phiên, session_start() phải được gọi. Ghi chú. Bạn không cần phải gọi session_destroy() từ mã thông thường.