Sử dụng POST phiên đảm bảo các yêu cầu:
Bên trong trang web (ví dụ index.php) chúng ta cần phải lưu trữ các sessionid
<?php
// Create Session
$session = session_id();
if(empty($session)) session_start();
?>
<head>
...
<script type="text/javascript">
sid = '<?php echo session_id(); ?>';
</script>
<script type="text/javascript" src="ajaxrequest.js"></script>
...
</head>
Các yêu cầu ajax (ajaxrequest.js)
/* simple getAjax function
* @param $url request url
* @param $param parameter (dont use ?)
* @param callback function on success
*/
var spinnerid = '#spinner'; // Spinner as long ajax requests running
$(document).ajaxStart(function() { $(spinnerid).show(); });
$(document).ajaxStop(function() { $(spinnerid).hide(); });
function getAjax(url, param, callback) {
var data = null;
url += "?sid=" + sid + "&" + param;
$.ajax({
url: url,
method: "POST", // uncomment to use GET, POST is secured by session
cache: false,
async: true,
success : function(data){
callback(data);
},
}
getAjax('http://domain.com/', 'data=foo', function(data) {
// do stuf with data
var jsonobj = eval("(" + data + ")");
var data = jsonobj[0][ 'data' ];
});
Phía php có trách nhiệm:
if(isset($_GET['sid'])) $client_sid = $_GET['sid'];
if(session_id() == null) session_start();
if(session_id() != $client_sid) {
// noID or wrongID, redirect to mainindex
ignore_user_abort(true);
header("HTTP/1.1 403 Forbidden");
header("Connection: close", true);
exit;
} else {
// get data
if(isset($_GET['data'])) {
$data = $_GET['data'];
} else if(isset($_POST['data'])) {
$data = $_POST['data'];
} else {
$data = null;
}
// do stuff with data
// return data as json
$resp[0]['data'] = $data;
print_r(json_encode($resp));
}
+1 Vì yêu cầu AJAX dựa trên trình duyệt gửi cookie với mỗi yêu cầu - tất cả những gì bạn cần là thêm kiểm tra mã thông báo trên mỗi trang. – Xeoncross
Điều đó sẽ không ngăn một rô-bốt nhấn trực tiếp vào API. Nó có thể nhận được một mã thông báo truy cập giống như ứng dụng JavaScript của bạn. – Quentin