2013-06-10 61 views
5

tôi có một lựa chọn cho logout và đây là mã của tôi:Thoát khỏi tất cả các phiên

session_start(); 

session_destroy(); 

setcookie("key","",time()-60*60*24); 

setcookie("username","",time()-60*60*24); 

Tôi muốn thêm một tùy chọn để đăng xuất khỏi tất cả các phiên (trên thiết bị khác) ví dụ nếu người dùng thay đổi mật khẩu của mình , tất cả phiên cho người dùng này rõ ràng và đăng xuất khỏi tất cả.

Tôi làm cách nào để chỉnh sửa tất cả phiên trên tất cả các thiết bị? Tôi có thể lưu trữ id phiên vào cơ sở dữ liệu và thay đổi dữ liệu bằng khóa phiên không? (không phải là người dùng hiện tại)

+1

nếu phiên của bạn được lưu trữ trong cơ sở dữ liệu, cùng với ID của người dùng, bạn có thể xóa tất cả bản ghi (phiên) cho ID của người dùng đó. –

+0

cách xóa dữ liệu phiên với khóa phiên? –

Trả lời

1

Đặt cược tốt nhất ở đây là tạo ra của bạn căn cứ cơ sở dữ liệu riêng session handler.

Bạn sẽ có nhiều quyền kiểm soát những gì bạn có thể làm với các phiên sau đó. Có một bài viết tốt nhưng ngày tháng here hiển thị ví dụ về cách thực hiện điều đó.

+0

Nhân tiện, các cơ sở dữ liệu như MySQL không được tạo ra để xử lý các phiên. Họ có thể nhưng hiệu suất sẽ giảm A LOT. Sử dụng một cái gì đó như Redis sẽ là cách tốt nhất. – Sky

1

Bạn có thể thêm trường datetime vào bảng người dùng được gọi là session_expires_at. Tại mỗi lần tải trang, so sánh ngày/giờ hiện tại với session_expires_at. Nếu nó hết hạn, hãy đăng xuất chúng. Khi người dùng nhấp vào "đăng xuất khỏi tất cả các phiên", chỉ cần đặt trường đó thành now().

Bạn không thể buộc trang thay đổi từ phía máy chủ mà không có một số nhịp tim (điều ajax hoặc socket.io). Nó sẽ phải xảy ra khi tải trang.

+0

Tôi có thể lưu khóa phiên và truy cập vào phiên đó bằng khóa phiên sau không? –

+0

Để biết điều đó, hãy xem câu trả lời của Orangepill. –

-1

Các php có lệnh để tiêu diệt tất cả các phiên bằng cách sử dụng lệnh sau:

ini_set('session.gc_max_lifetime', 0); 
ini_set('session.gc_probability', 1); 
ini_set('session.gc_divisor', 1); 

Dòng đầu tiên được sử dụng để sửa chữa giá trị suốt đời của phiên bằng 0 giây. Sau đó, xác suất được đặt thành 100% làm sạch.

Nếu bạn cần phá hủy một người dùng cụ thể, bạn có thể thêm các hướng dẫn sau đây để xử lý phiên của bạn:

if ($_SESSION['username'] == 'user to delete') { 
    session_destroy(); 
} 
+3

Thao tác này sẽ kết thúc tất cả các phiên từ tất cả người dùng. Đó có lẽ là một điều xấu ở đây. –

+0

Tôi không muốn xóa tất cả phiên –

+1

@Ali Akbar, tôi đã chỉnh sửa nhận xét của mình. bạn có thể sử dụng phương pháp thứ hai. – lvarayut

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