2013-08-31 115 views
6

Trong PHP dẫn sử dụng, mô tả cho session_destroy() chức năng là:Session_destroy() làm gì trong PHP?

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

Tôi nhầm lẫn về mô tả này. Nếu hàm này phá hủy tất cả dữ liệu phiên, thì tại sao các biến toàn cục được kết hợp với phiên không được bỏ đặt? Tại sao chúng ta có thể sử dụng các biến phiên một lần nữa?

+0

Tôi nghĩ rằng bạn bỏ lỡ para sau của cùng một trang: Để giết phiên hoàn toàn, muốn đăng nhập người sử dụng ra, id phiên cũng phải unset.Nếu cookie được sử dụng để truyền bá id phiên (hành vi mặc định), thì cookie phiên phải được xóa. setcookie() có thể được sử dụng cho điều đó. – Satya

+0

'xNếu chức năng này phá hủy tất cả dữ liệu phiên, thì tại sao các biến toàn cầu liên quan đến phiên không được đặt? 'Vì không có điểm nào trong việc làm như vậy. Các biến toàn cầu sẽ biến mất theo yêu cầu tiếp theo. –

+0

Các biến toàn cục mà bạn * nghĩ * được liên kết với phiên đó không được liên kết với phiên đó nữa bởi vì phiên đã bị hủy. Bạn có thể sử dụng các biến làm biến nhưng không sử dụng như biến phiên. Không có lý do gì để phá hủy các biến đó, vì vậy bạn có thể nên thêm vào câu hỏi của bạn tại sao bạn nghĩ khác đi vì vậy nó rõ ràng hơn những gì bạn hỏi. Có lẽ có một số vấn đề cụ thể mà bạn cần trợ giúp? – hakre

Trả lời

5

Tôi đang bối rối về mô tả này. Nếu chức năng [session_destroy()] này phá hủy tất cả dữ liệu phiên, thì tại sao các biến toàn cục được liên kết với phiên này không bị hủy? Tại sao chúng ta có thể sử dụng các biến phiên một lần nữa?

Dữ liệu phiên là dữ liệu được liên kết với phiên. Phiên họp được xác định bởi tên của nó (tên phiên) và id của nó (phiên id).

Bằng cách sử dụng mà chức năng, tất cả các phiên này (tên + id) dữ liệu bị phá hủy.

Vùng chứa biến cho phép bạn đọc/đặt dữ liệu đó ở đó, vì vậy bạn có thể hoạt động trên dữ liệu đó (ví dụ: có thể có thông tin như hoạt động cuối cùng và đây là đăng xuất và bạn muốn lưu trữ hoạt động cuối cùng biết lúc đăng xuất hay như vậy vào một số nhật ký hoặc cơ sở dữ liệu, vậy tại sao xóa nó? có thể phản tác dụng vì bạn muốn hủy (hoặc cam kết) phiên nhanh, ví dụ khi bạn biết chỉ truy cập chỉ đọc, hãy giữ dữ liệu phiên trong bộ nhớ, nhưng cam kết phiên đã có bởi vì không cần phải giữ nó mở).

Hãy nhớ rằng ngay cả các biến này là truy cập thông qua $_SESSION họ không nằm trong phiên giao dịch nữa. Có lẽ đó là phần khó hiểu?

BTW mô tả của tôi không hoàn toàn chính xác. PHP nội bộ xác định dữ liệu phiên theo id chỉ để bạn có thể thay đổi tên phiên và session_destroy() vẫn sẽ xóa dữ liệu phiên vì id phiên không thay đổi.

+0

Cảm ơn bạn đã trả lời. Ban đầu tôi đã hiểu nhầm mô tả. Tôi đã làm sai lệch dữ liệu phiên với các biến phiên. – PixelsTech

1

session_destroy() xóa các tập tin phiên, nơi dữ liệu được lưu trữ phiên. Nhìn đây:

<?php 

session_save_path('./session/'); 

session_start(); 
$_SESSION['v'] = array('foo' => 123, 'bar' => 'spam'); 
$_SESSION['m'] = "rocky"; 

if(isset($_GET['delete']) == 'true') 
    session_destroy(); 

?> 

Tôi có một kịch bản whitch tạo ra một phiên và thiết lập giá trị của v-10, và nó lưu các dữ liệu phiên trong đường dẫn kịch bản tương tự trong một thư mục có tên ./session.

Bây giờ hãy mở trang và sau đó duyệt qua thư mục ./session, bạn sẽ thấy một tệp có tên tương tự với sess_4r7ldo7s5hsctu3fgtvfmf4sd0. Đây là nơi mà phiên dữ liệu đang được lưu giữ và nó sẽ chứa:

v|a:2:{s:3:"foo";i:123;s:3:"bar";s:4:"spam";}m|s:5:"rocky"; 

Kích hoạt session_destroy() bằng cách thông qua ?delete=true trang, các tập tin phiên sẽ bị xóa đơn giản.