我刚刚开始学习网络开发,有件事一直困扰着我一段时间,网站如何控制您可以访问和不能访问的内容。
例如,像 Facebook 这样的网站。当我第一次访问该站点时,它会显示一个登录表单,一旦我登录到我之前尝试访问的同一页面,现在显示与我相关的信息,我只能在登录后访问,我可以导航到另一个站点并且然后回到谷歌,它仍然允许我使用 if 而无需再次登录。
当某人未登录时,网站将如何阻止他们尝试访问特定页面,假设页面 viewProfile.php
。网站如何知道允许谁访问此页面?
我意识到这个问题可能看起来令人困惑和初级,但这只是我在查看 facebook 时想到的一个问题。
谢谢。
最佳答案
这是一个非常简单的概念,叫做 session 。
当您访问 Facebook 时,它会读取通过连接发送给它的唯一信息,例如 IP 地址、浏览器和一些其他次要信息,当这些信息组合在一起时,它会创建一个唯一标识符。
此唯一标识符随后存储在一个文件中,如下所示:
d131dd02c5e6eec4693d9a0698aff95c.session
因此,当您使用凭据登录时,应用程序会将信息添加到此文件中,例如上次事件等。
当你离开并回来时,Facebook 将读取随每个请求一起发送的信息,然后将所有信息加在一起并创建一个唯一的哈希值,如果该哈希值存在于它的存储系统中,它将打开并读取的内容,并确切地知道你是谁。
所有这些都与 cookie 相结合,唯一的哈希被发送回浏览器并存储在您的 cookie 文件夹中,这个 cookie 文件随每个请求一起发送回 facebook。
PHP 会在内部为您处理此问题,因此启动和运行它非常简单:http://php.net/manual/en/features.sessions.php
下面是一个示例,可以帮助您更深入地理解这个概念。
<?php
/*
* The session_start generates that hash and send a cookie to the browser
* This has to be first as you can only send cookie information before any content
*/
session_start();
/*
* Anything storeg within $_SESSION is what's been read from the session file and
* We check to see if the information has already been set on the first time the user
* visited the site
*/
if(!isset($_SESSION['hits']))
{
$_SESSION['hits'] = 0;
}
/*
* Now we increment the value every time the page is laoded
*/
$_SESSION['hits']++;
/*
* now we display the amount's of hits the user has loaded the page.
*/
echo 'You have vistited this site <strong>' . $_SESSION['hits'] . '</strong> times.';
?>
如果您加载此页面然后按 F5, session 值会在每次请求时递增,因此您应该看到如下内容:
- 您已1 次访问此网站。
- 您已2 次访问此网站。
- 您已3 次访问此网站。
- 您已4 次访问此网站。
- ...
session 文件对于每个访问者都是唯一的,这意味着当在 PHP 中使用 session 变量时,它只对那个用户有效,所以每个人都有自己的个人 session 。
在您进行研究时,最好在 StackOverflow 中搜索某些标签,例如 PHP 和 session 。
https://stackoverflow.com/questions/tagged/php+session
这是一个关于 cookie 和 session 优势等的好问题。
关于php - 网站访问控制实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608946/