PDA

View Full Version : Chặn ip trong php



motien
03-06-2012, 11:33
Chào các bác. Hiện em đang làm 1 trang trắc nghiệm. Em muốn mỗi ip chỉ được làm bài trắc nghiệm 1 lần. Nên khi người dùng ấn vào nút chuyển qua trang .php tính toán kết quả, muốn người dùng ko thể làm bài test 2 lần thì làm thế nào?

danhnguyen223
03-06-2012, 13:00
hàm này sẽ lấy dc địa chỉ IP của máy tính: $_SERVER['REMOVE_ADD'];

maychu.net
03-06-2012, 13:18
hàm này sẽ lấy dc địa chỉ IP của máy tính: $_SERVER['REMOVE_ADD'];

Nhìn chú danhnguyen223 giải đáp, cộng thêm cái chữ ký của chú 'Dạy lập trình web php - Thiết kế website' mà thấy rầu quá đi thôi.

luuanhquyen
03-06-2012, 13:53
Vậy có lẽ nên lưu trữ người dùng - ca thi vào trong csdl.

nnquangit
03-06-2012, 21:33
Chào các bác. Hiện em đang làm 1 trang trắc nghiệm. Em muốn mỗi ip chỉ được làm bài trắc nghiệm 1 lần. Nên khi người dùng ấn vào nút chuyển qua trang .php tính toán kết quả, muốn người dùng ko thể làm bài test 2 lần thì làm thế nào?


hàm này sẽ lấy dc địa chỉ IP của máy tính: $_SERVER['REMOVE_ADD'];



Nhìn chú danhnguyen223 giải đáp, cộng thêm cái chữ ký của chú 'Dạy lập trình web php - Thiết kế website' mà thấy rầu quá đi thôi.

phải chăng cao thủ có cách lấy ip pro hơn hay chỉ chém gió qua đường ?

vnntech.com
04-06-2012, 07:50
bạn làm một file include("security.php") trên đầu các trang
trong đó check

if ($_SERVER['REMOVE_ADD']="ip cần chặn"){
header("HTTP/1.0 404 Not Found");
die();
}

nhoemzx
04-06-2012, 09:12
vnntech dot com: Nếu bác có help thì cũng nên check chính tả trước khi submit.

tuine2334
04-06-2012, 10:43
hàm này sẽ lấy dc địa chỉ IP của máy tính: $_SERVER['REMOVE_ADD'];
Cái này quá chính xác. Còn chủ topic muốn làm cách nào thì tùy vào giải thuật + csdl của bác thôi.

maychu.net
05-06-2012, 16:20
hàm này sẽ lấy dc địa chỉ IP của máy tính: $_SERVER['REMOVE_ADD'];

Trời ạ, cái biến định sẵn (pre-defined variable) mà gọi là hàm, còn thuộc tính của biến này ghi cũng sai, thay vì REMOTE_ADDR lại ghi là REMOVE_ADD.
Viết có mỗi 1 dòng mà sai đến 2 lỗi.


phải chăng cao thủ có cách lấy ip pro hơn hay chỉ chém gió qua đường ?

Ref.
http://php.net/manual/en/reserved.variables.server.php

maychu.net
05-06-2012, 16:29
Giải pháp thì đâu cần limit mỗi IP được test 1 lần làm chi, bạn quản lý user và gán một biến đã tham gia theo user / test đó. Lưu vào bản dữ liệu, cấu trúc đại khái như vầy:
--------------------------------------
table_id | test_id | user_id | test_done
--------------------------------------

Khi kết thúc bài thi thì test_done = 1, chưa xong thì = 0
Ví dụ, bài test có id=1, user có id=1, thì bạn kiểm tra test_done với user có id=1 làm bài test có id=1, xem giá trị test_done=1 thì không cho làm nữa, còn test_done= 0 thì tiếp tục làm.

Bài tập của bạn có thể có hơn 3 giải thuật để làm, kiểm tra IP thì rất bất tiện trong các trường hợp người tham gia test thay đổi IP.

luuanhquyen
05-06-2012, 19:00
maychu.net nói chuẩn đấy, dùng ip không phải là giải pháp cho trường hợp này. Khuyến nghị dùng cách của maychu.net

anhminhlth
11-06-2012, 12:16
với yêu cầu của chủ topic thì phải làm như maychunet mới chuẩn. ý hay đó.

liemdo
13-06-2012, 02:01
Bạn cũng cần phải lưu thời gian làm bài của người dùng.

superthin
13-06-2012, 08:23
Cái này quá chính xác. Còn chủ topic muốn làm cách nào thì tùy vào giải thuật + csdl của bác thôi.

Không rõ quá chính xác là chính xác như thế nào?

@Chủ topic: sử dụng cách kiểm tra IP đơn thuần là không ổn, nên làm cách nào đó cho người dùng đăng nhập nếu không sẽ rất khó xử lý tình huống các người dùng có cùng IP vì họ trong cùng một mạng LAN.