首先,这是我在 Stack Overflow 上的第一篇文章,我正在尝试为我正在从事的个人项目学习 PHP/MySql。我想我会花很多时间在这里问很多问题,所以如果我问太多你可能觉得微不足道的问题,请原谅我。
继续提问。
我使用 ajax 和 PHP 的组合来处理服务器端脚本。我想要做的是拥有一个 PHP 模块来接受输入、处理某些内容并提供输出。很像一个函数。
我想要思考的是如何使 PHP 像一个黑盒进程模块,像一个函数,而不是一个页面。
作为示例,我有一个 login.html 页面,它使用 AJAX 将请求发送到 login.php 页面。 login.php 接受输入,处理输入,并输出一个 json 对象,该对象告诉调用页面是否成功,如果不成功,将列出一路上遇到的错误。
问题就出在这里。我不希望用户能够直接访问login.php。事实上,我什至不希望 login.php 对公众可见。 login.php只是一个进程,所以如果你去它,它会是空白的。让用户看到空白页面似乎不是一个好的做法。
我考虑过将 login.php 放在 public 文件夹之外,但这意味着 ajax 也无法向它发出请求。
为了解决这个问题,我将login.html 放在login.php 中。它会向自身发出请求,然后根据请求的类型,php 将执行不同的操作。这将解决“空白页”问题。但我不禁想知道是否有一种方法可以制作一个独立的 PHP 模块,而不必使其像页面一样工作。
任何对此的想法都将不胜感激。谢谢。
最佳答案
如果 AJAX 可以请求该页面,那么任何用户都可以使用其浏览器导航到该页面。您确实不应该担心这一点,因为除非它们四处窥探,否则它们不会发生在 PHP 页面上。如果您想要验证该请求是由 AJAX 发出的,您可以 look for the X-Requested-With
header ,但这并不总是有效,因为并非每个浏览器都会发送此内容:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
// Ajax Request
} else {
// Not AJAX, redirect to login page
header('Location: login.html');
exit();
}
为了使其在每个浏览器上可靠地工作,您需要在客户端设置此 header :
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
然而,这仍然不是完全可靠的,因为任何人都可以使用像 Tamperdata 这样的程序发送 header ,但这应该足以防止懒惰的窥探。不过,再次强调,允许用户查看此页面(如果他们窥探的话)不会是一个大问题。它不会造成安全漏洞,并且如果用户偶然发现 login.php
页面,他们将被重定向回 login.html
。
关于PHP 页面作为函数/进程模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679953/