我有一个索引页面,我使用jquery' .load()
函数在div
内加载外部页面内容。
我的问题'如果用户访问文件本身,他也会看到页面内容,但我不想这样。我只希望在整个.load()
函数中将页面加载到索引页面中时加载页面。
我该怎么做才能应用这条规则?
答案 0 :(得分:0)
第一个建议是通过将其作为index.php
的一部分包含在PHP中来加载它。
第二种方法是使用$_SESSION
。从index.php设置会话密钥,然后在您正在加载的文件中检查它:
<?php
session_start();
$_SESSION['activatedFromIndexPage'] = true;
?>
<div id='foo'>Your HTML here</div>
<script>
$(document).ready(function() {
$('#foo').load('bar.php');
});
</script>
&#13;
<?php
session_start();
if(!array_key_exists('activatedFromIndexPage',$_SESSION)) {
// if the key is not set, you didn't get here by way of index.php
die;
}
?>
<div>your output goes here...</div>
答案 1 :(得分:0)
由于.load()
方法使用的是ajax,因此您应该可以使用$_SERVER['HTTP_X_REQUESTED_WITH']
。我可能会创建一个可重用的函数来检查。
<强> /functions/isAjaxRequest.php 强>
function isAjaxRequest($type = 'HTTP_X_REQUESTED_WITH')
{
return (!empty($_SERVER[$type]) && strtolower($_SERVER[$type]) == 'xmlhttprequest');
}
<强> /ajax_load_page.php 强>
<?php
# Add the function
require_once(__DIR__.'/functions/isAjaxRequest.php');
# Stop if not ajax
$isAjax = isAjaxRequest();
if(!$isAjax)
die('Invalid Request.');
?>
<p>This is a valid request!</p>
虽然标题可以被客户伪造,但普通用户不会试图绕过它。