09/10/2018, 22:47
Một số câu hỏi về php
câu 1 : Làm thế nào để refesh không có hiệu lực với file index.php như sau,trong một cuốn sách họ nói dùng một flag để xác định người dùng đã submit thành công chưa nhưng ko chỉ cụ thể :
câu 2:
-Bạn có thể cho mình 1 ví dụ về kết hợp giữa session và cookie.
- http://dk3.com không hiểu họ làm thế nào mà mỗi lần dùng url forward của họ truy cập đến site của mình ,site có bộ đếm dựa trên session thì có tới 2 lần ghé thăm và không thể đăng nhập vì session mất tiêu luôn .
PHP Code:
<?php
//Tất cả các thứ cần thiết:
include"lib.php";
//Chèn dữ liệu
if(isset($_POST***91;"username"***93;))
{
//Thêm vào bảng users trong CSDL
add_user($_POST***91;"username"***93;,$_POST***91;"password"***93;);
};?>
<form action=index.php method=post>
User :<input type=text name=username><br>
Pass:<input type=password name=password><br>
<input type=submit value=submit>
</form>
-Bạn có thể cho mình 1 ví dụ về kết hợp giữa session và cookie.
- http://dk3.com không hiểu họ làm thế nào mà mỗi lần dùng url forward của họ truy cập đến site của mình ,site có bộ đếm dựa trên session thì có tới 2 lần ghé thăm và không thể đăng nhập vì session mất tiêu luôn .
Bài liên quan
<input type="hidden" name="kiemtra" value="hop_le_roi" \>
sau đó ở phần mã bạn dùng isset để kiểm tra
// neu xac nhan la hop le
// neu register_global chưa bật thì dùng $_POST để lấy nhé
// cộng với kiểm tra method có phải là post hay không nữa là được
if(isset($kiemtra) && ($kiemtra == "hop_le_roi") )
{
// cong viec ban muon thuc hien
}
else
{
// in thong bao loi
}
More info : http://php.net/manual or http://zend.com
Ở đây mình không phải kiểm tra dữ liệu hợp lệ hay chưa.Mà là sau khi nhập thành công,nếu refresh trang đó ,dữ liệu sẽ lại nhập lần nữa.
Xem mấy source của người vn code thì thường dùng hàm để chuyển trang ,nhưng bài toán là
Tớ tưởng cậu hỏi vậy
Theo tớ có hai cách giải quyết thế này nhé, cậu tham khảo nếu sai thì thôi á hi hi
1. Nếu vẫn trung thành với việc input data và code exec cùng "ở chung một nhà" thì sau khi submit thành công thì bạn phải redirect nó đi sang chỗ khác chứ,nếu chưa sent thứ gì sang client thì dùng header để quăng nó đi
if(isset($kiemtra) && ($kiemtra == "hop_le_roi") )
{
// cong viec ban muon thuc hien
header("Location : success.php");
// dùng success để đưa "em" về lại trang nhà lol
}
else
{
// in thong bao loi bằng file error.php chẳng hạn
}
ví dụ như :
echo "
<html>
<head>
<title> Redirect ....</title>
<meta http-equiv="refresh" content="5;URL=index.php">
</head>
<body></body>
</html>
";
nếu chưa có cookie thì
setcookie("kiemtra","da_nhap_du_lieu_roi",time()+3 600);
nếu đã có cookie và giá trị của nó là da_nhap_du_lieu_roi thi in thông báo ra
Túm lại solution cho việc này là dùng một trang trung gian để khắc phục vấn đề. Bạn có thể để phần action lại là một query (method lấy vào là GET) dài loàng ngoàng để đánh lừa hacker và sau đó include một trang khác để giải quyết vấn đề.
Do Mita thường dùng action là một trang khác nên có thể giải quyết vấn đề này chưa thấu đáo, ai có cách nào hay thì post lên mọi người tham khảo.
Hic , quên code cái cookie cho cậu
// neu da nhap du lieu roai
if (isset($_COOKIE***91;'kiemtra'***93;) && ($_COOKIE***91;'kiemtra'***93; =="da_nhap_du_lieu_roi"))
{
echo "Dont Flood me ! thanks you .";
}
else
{
// show input data
// create code to process your apps
// at the end the code
setcookie ("kiemtra","da_nhap_du_lieu_roi",time()+3600)
}
~~> chuyển qua dùng session
<?php
//Tất cả các thứ cần thiết:
include"lib.php";
//Chèn dữ liệu
if (!session_is_registered("ses_flag_add"))
session_register("ses_flag_add");
if($_SESSION***91;"ses_flag_add"***93;==""){
if(isset($_POST***91;"username"***93;))
{
//Thêm vào bảng users trong CSDL
add_user($_POST***91;"username"***93;,$_POST***91;"password"***93;,$_SESSION***91;"ses_flag_add"***93;);
/*doi thanh add_user($username,$password,&$ses_add) , khi add thanh cong $_SESSION***91;"ses_flag_add"***93; se co gia tri*/
}
}
?>
<form action=index.php method=post>
User :<input type=text name=username><br>
Pass:<input type=password name=password><br>
<input type=submit value=submit>
</form>
- Chống Refresh là chống user khi ấn back lại rồi refresh thì ko hiệu lực cho submit form phải ko
(nếu ko phải cái này , thì chống refresh = cách yêu cầu user tháo nút F5 trên Keyboard ra )
- Còn cái thứ 2 , bạn nói rõ hơn được ko , mình ko hiểu lém
Hi vọng sẽ giúp được bạn
Tạo session và cookie
- Kiểm tra điều kiện (1)
- Nếu đúng tạo cookie và session có những thông tin gần giống nhau (không nhất thiết phải giống nhau 100%).
Kiểm tra session và cookie
- Kiểm tra session nếu có, //Có thể gán lại cookie// tiếp tục làm việc (1)
- Kiểm tra session nếu không có, kiểm tra cookie, nếu cookie có gán lại session phù hợp cookie, làm việc (1). Nếu cookie không có, quay về kiểm tra điều kiện (1) để có thể làm việc (1).
(quảng cáo) http://micti2php.blogspot.com/2005/0...on-cookie.html