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ể :
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>
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 .
viết 01:03 ngày 10/10/2018
Trong phần form bạn chèn thêm một(2,3,4,5 ...) thẻ hidden nữa, cụ thể
<input type="hidden" name="kiemtra" value="hop_le_roi" \>
sau đó ở phần mã bạn dùng isset để kiểm tra
PHP Code:
// 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

Tuy nhiên cách này không hoàn hảo để kiểm tra tính hợp lệ của dữ liệu nhập vào khi code exec cùng nằm chung với input data (nên dùng $PHP_SELF hay hơn vì có cả query trong đó hacker khó xác định hơn)
More info : http://php.net/manual or http://zend.com
Pfiev_k47 viết 00:50 ngày 10/10/2018
Cách khác đi mitavn.Sau khi nhập dữ liệu lần đầu,Sau đó refresh $kiemtra sẽ vẫn ="hợp lệ rồi",.
Ở đâ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à
viết 01:02 ngày 10/10/2018
Ừ !
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
PHP Code:
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

Còn đã gửi cái gì đó đi rồi thì dùng echo
ví dụ như :
PHP Code:
echo "
<html>
<head>
<title> Redirect ....</title>
<meta http-equiv="
refresh" content="5;URL=index.php">
</head>
<body></body>
</html>
"

2. Dùng cookie để lưu thông tin của người dùng lại
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
PHP Code:
// 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)

Nếu máy khách (client) không chấp nhận cookie thì bó chíu keke
~~> chuyển qua dùng session
traiHanoi viết 00:53 ngày 10/10/2018
ban thu lai doan code nay xem
PHP Code:
<?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>
nquocbao viết 01:00 ngày 10/10/2018
Hỏi lại bạn

- 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
Vinhie47 viết 00:50 ngày 10/10/2018
Chú pfiev_k47 vẫn còn máu mê cái vụ PHP này quá nhỉ? Chuyển sang vụ khác đi
tet2005 viết 00:54 ngày 10/10/2018
Kết hợp Session và Cookie

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
Bài liên quan
0