网站访问控制如何实际工作?

Ter*_*ler 4 php security web-applications

我刚刚开始学习Web开发,现在有些东西让我感到困惑,网站如何控制你可以访问和无法访问的内容.

例如,像Facebook这样的网站.当我第一次访问该网站时,它会显示一个登录表单,一旦我记录了我尝试访问的同一页面,现在显示与我相关的信息,我只能在登录后访问,我可以导航到不同的站点和然后回归谷歌,它仍然允许我使用,如果没有再次登录.

当网站没有登录时,网站是如何阻止某人尝试访问特定网页的viewProfile.php.网站如何知道允许访问此页面的人员?

我意识到这个问题可能看起来令人困惑和基本,但它只是在观看Facebook时发现的一些东西.

谢谢.

Rob*_*itt 6

这是一个非常简单的概念,称为会话.

当您访问Facebook时,它会读取通过IP地址,浏览器和其他一些小信息等连接发送给它的唯一信息,当这些信息组合在一起时,它会创建一个唯一的标识符.

然后将此唯一标识符存储在如下文件中:

 d131dd02c5e6eec4693d9a0698aff95c.session
Run Code Online (Sandbox Code Playgroud)

因此,当您使用凭据登录时,应用程序会将此信息添加到此文件中,例如上次活动等.

当你离开并回来时,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.';

?>
Run Code Online (Sandbox Code Playgroud)

如果你加载这个页面,然后按F5,会话值得到每个请求增加,所以你应该看到如下内容:

  • 你有1次访问这个网站.
  • 你有2次访问这个网站.
  • 你有3次访问这个网站.
  • 你有4次访问这个网站.
  • ...

会话文件对于每个访问者来说都是唯一的,这意味着当在PHP中使用会话变量时,它仅对该用户而言,因此每个人都有自己的会话.

正如您研究的那样,可以在StackOverflow中搜索某些标签,例如PHP和会话.

/sf/ask/tagged/php/+session

这是一个关于cookie和会话优势等的好问题.

PHP会话和Cookie的目的及其差异