Tôi đang gặp sự cố trong xử lý phiên trong PHP (phiên bản 5.2.10). Tôi đang sử dụng các chức năng được đề cập dưới đây để đăng nhập, đăng xuất và xác thực phiên.Lỗi khi hủy phiên trong PHP
login() { session_set_cookie_params(0); session_start(); session_regenerate_id(true); $_SESSION['user_id'] } validate_session() { session_set_cookie_params(0); session_start(); if (isset($_SESSION['user_id']) === FALSE) { session_destroy(); logout(); header("Location: login_page"); } } logout() { session_set_cookie_params(0); session_start(); $_SESSION = array(); setcookie(session_name(), '', time() - 3600, '/'); session_destroy(); }
Mỗi trang đầu tiên thực hiện cuộc gọi đến hàm validate_session(). Nếu phiên không hợp lệ, nó sẽ chuyển hướng đến trang đăng nhập. Hàm login() được sử dụng để tạo phiên cho người dùng. Khi người dùng nhấp vào đăng xuất, chức năng đăng xuất() được gọi để hủy phiên.
Vấn đề là: ngẫu nhiên logout() chức năng ném cảnh báo:
Cảnh báo: session_destroy(): phiên hủy diệt đối tượng thất bại
Tôi nhận được cảnh báo này rất thường xuyên. Giống như trong số 20-30 cuộc gọi đăng xuất, tôi nhận được một lần. Có suy nghĩ gì không?
Tôi đang phát triển trên máy tính Windows XP.
Cập nhật: Các phiên được lưu trữ trong hệ thống tệp.
Đường dẫn: C: \ WINDOWS \ Temp
Có vẻ như nó được một thời gian dài kể từ khi bạn đã chấp nhận bất kỳ câu trả lời trên stackoverflow .. –
Vâng! Tôi đã không được rất tích cực trong stackoverflow. Và trong một số trường hợp tôi chưa có câu trả lời thỏa đáng. – Varun
Hi Varun, Bạn có thể giải thích tại sao bạn sử dụng chuyến đi bằng trong so sánh đó không? Thông thường nếu (! Isset()) sẽ là đủ, tôi biết nó là ironclad hơn nhưng isset() nên chỉ bao giờ trở lại một boolean, Bạn có thực sự cần phải xác nhận loại của nó? Nó có lẽ là không có khả năng, nhưng có lẽ đó là đôi khi trở lại đúng khi nó không nên? – picus