2012-03-02 41 views
5

Chức năng session_destroy() làm gì? Để xóa tất cả các biến phiên trong mảng toàn cầu $ _SESSION tôi phải sử dụng session_unset(). Để gỡ bỏ phiên từ trình duyệt client (xóa phiên id và tên) tôi phải cookie unset:Tại sao session_ destroy() là cần thiết?

unset($_COOKIES[session_id()]); 
unset($_COOKIES[session_name()]); 

Tại sao session_destroy() chức năng là cần thiết?

+0

http://us.php.net/manual/en/function.session-destroy.php –

+0

Cảm ơn bạn rất nhiều, tôi đã đọc nhiều lần nhưng không thể hiểu nó làm gì. Tại sao nó không thực sự phá hủy phiên. Để hủy phiên, tôi phải sử dụng hai bước nữa. Nhưng trong thực tế session_destroy() nên làm những bước cho tôi. – Green

+2

Nếu câu trả lời * Mã khác * đã cung cấp cho bạn thông tin bạn cần (Tôi không thể thấy nó không thể), bạn có chấp nhận nó không? Đó thường là cách mọi thứ được thực hiện ở đây: p – RobinJ

Trả lời

11

session_destroy() kết thúc toàn bộ phiên, có nghĩa là nó sẽ bị xóa khỏi bộ nhớ phiên của PHP và không bao giờ có thể được sử dụng lại. Nếu bạn không chỉ đặt biến phiên và cookie, phiên sẽ vẫn là phía máy chủ đang hoạt động và có thể được tái chế nếu một số biến phiên được đặt lại và cookie có ID phiên ban đầu được gửi lại cho khách hàng.

Để đặt theo cách khác: một phiên cơ bản bao gồm ID bí mật được lưu trữ ở đâu đó trên máy chủ web, cùng với các biến phiên được đăng ký cho phiên đó. ID phiên được gửi đến máy khách (thường là cookie) để khách hàng có thể được xác định là 'chủ sở hữu' của phiên trên các yêu cầu sau này. Giả sử một phiên đã được tạo ra và có các biến đăng ký với nó, đây là một cái nhìn tổng quan về những gì các chức năng thực hiện:

  • session_start() nhập khẩu tất cả các biến phiên thuộc session ID mà khách hàng gửi từ registry phiên đến $_SESSION mảng
  • session_unset() hoặc gọi unset() trên $_SESSION biến sẽ xóa tất cả các biến đăng ký phiên hiện tại, nhưng nó sẽ không rõ ràng phiên bản thân
  • unset cookie phiên họp của khách hàng sẽ báo hiệu cho cli cho rằng phiên đã kết thúc, nhưng này sẽ không xóa xóa phiên khỏi đăng ký phiên trên máy chủ hoặc
  • session_destroy() là chức năng duy nhất thực sự làm sạch phiên khỏi đăng ký phiên, do đó nghĩa là 'hủy' phiên

trong khi session_destroy() sẽ unregister tất cả các biến session, nó sẽ không xóa $_SESSION mảng trong kịch bản hiện đang được thực hiện, do đó, nó vẫn còn là một ý tưởng tốt để bỏ đặt biến session để ngăn chặn lỗi và các vấn đề an ninh.

Trên một lưu ý liên quan, hướng dẫn PHP khuyến cáo không sử dụng session_unset() mà là unset các phím từ $_SESSION:

Nếu $_SESSION (hoặc $HTTP_SESSION_VARS cho PHP 4.0.6 trở xuống) được sử dụng, sử dụng unset() để hủy đăng ký biến phiên, tức là unset($_SESSION['varname']);.

+0

'Chỉ sử dụng session_unset() cho mã không được dùng cũ hơn mà không sử dụng $ _SESSION.' Để giải phóng tất cả SESSION VARIABLES sử dụng: ' $ _SESSION = array() ' – MTVS

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