ExamSafe là một giải pháp thi trắc nghiệm trực tuyến toàn diện, tập trung vào tính bảo mật và giám sát thời gian thực. Hệ thống sử dụng công nghệ SignalR để đảm bảo tính đồng bộ tức thì giữa thí sinh và giám thị, tích hợp các cơ chế phát hiện gian lận (rời tab, thoát toàn màn hình) thông minh.
- Quản lý đề thi: Tạo, sửa, xóa đề thi với cấu hình chi tiết (thời gian, mật khẩu, thời điểm mở/đóng).
- Soạn thảo câu hỏi: Giao diện trực quan, dễ dàng thêm/sửa/xóa câu hỏi trắc nghiệm.
- Giám sát Real-time (Monitor Dashboard):
- Theo dõi trạng thái của tất cả thí sinh (Đang chờ, Đang thi, Đã nộp).
- Cảnh báo gian lận: Nhận thông báo tức thì và đếm số lần vi phạm khi thí sinh rời tab.
- Duyệt thí sinh vào phòng thi (nếu bật chế độ Phòng chờ).
- Báo cáo & Thống kê: Xem bảng điểm chi tiết, xuất dữ liệu ra file Excel chuẩn.
- Sảnh chờ (Lobby): Giao diện thân thiện, báo trạng thái chờ duyệt thời gian thực.
- Giao diện làm bài thi:
- Chế độ Full-screen bắt buộc.
- Đồng hồ đếm ngược đồng bộ server.
- Thanh điều hướng câu hỏi (Palette) trực quan.
- Cơ chế chống gian lận:
- Tự động phát hiện hành vi rời khỏi tab (Alt+Tab, click sang màn hình khác).
- Tự động báo cáo vi phạm về máy chủ ngay lập tức.
- Framework: ASP.NET Core Web API (.NET 6/7/8).
- Database: SQL Server + Entity Framework Core (Code First).
- Real-time Communication: SignalR (WebSocket).
- Authentication: JWT / Custom Session logic.
- Core: HTML5, CSS3, Vanilla JavaScript (ES6+).
- UI Framework: Bootstrap 5.3 (Responsive Design).
- Real-time Client: Microsoft SignalR JS Client.
- Excel Export: SheetJS (xlsx).
Để chạy dự án trên máy cục bộ (Localhost), vui lòng làm theo các bước sau:
- .NET SDK (6.0 trở lên).
- SQL Server (Express hoặc Developer).
- Visual Studio 2022 hoặc VS Code.
- Clone repository:
git clone [https://github.com/your-username/ExamSafe.git](https://github.com/your-username/ExamSafe.git) cd ExamSafe/ExamSafe.API - Cấu hình chuỗi kết nối Database trong
appsettings.json:"ConnectionStrings": { "DefaultConnection": "Server=YOUR_SERVER_NAME;Database=ExamSafeDB;Trusted_Connection=True;TrustServerCertificate=True;" }
- Chạy lệnh Migration để tạo Database:
dotnet ef database update
- Khởi chạy Server:
Server sẽ chạy tại:
dotnet run
http://localhost:5000(hoặc port tương tự).
- Di chuyển vào thư mục Client (chứa các file
.html). - Mở file
index.htmlhoặc chạy thông qua Live Server (Extension của VS Code). - Lưu ý: Đảm bảo các file
.htmlđang trỏ đúng về địa chỉ API (mặc định làhttp://localhost:5000).
Hệ thống sử dụng thuật toán Debounce kết hợp với các sự kiện trình duyệt để đảm bảo tính chính xác, tránh báo lỗi sai (False Positives):
- Events: Lắng nghe
visibilitychange,blur, vàfullscreenchange. - Debounce: Khi phát hiện sự kiện, hệ thống chờ 1 giây để xác nhận hành động, tránh việc sự kiện bị kích hoạt kép (double counting).
- Server Logging: Vi phạm được gửi qua API và lưu vào Database, đồng thời bắn SignalR tới màn hình Giám thị ngay lập tức.