php - 网站访问控制实际上是如何工作的?

标签 php web-applications security

我刚刚开始学习网络开发,有件事一直困扰着我一段时间,网站如何控制您可以访问和不能访问的内容。

例如,像 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 优势等的好问题。

Purpose Of PHP Sessions and Cookies and Their Differences

关于php - 网站访问控制实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608946/

相关文章:

java - Struts 2 错误 - com.opensymphony.xwork2.util.logging.commons.CommonsLogger 错误

c# - 将 CSS 添加到 C# Web 应用程序

windows - 写入 Windows 安全日志

PHP 多对象取消引用

php - 如何为整个项目定义一些常量?

php - 从 WordPress 页面提交表单无法正常工作

java - 具有可选的 Google App Engine 支持的标准 Java webapp

java - 在 SecurityManager 下创建对象时出现 NoClassDefFoundError

android - 蓝牙文件交换是否完全安全?

php - 比较sql日期和php日期