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

时间:2011-04-10 00:37:39

标签: php web-applications security

我刚刚开始学习网页开发,现在有些事情让我感到困惑,网站如何控制您可以访问的内容并且无法访问。

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

网站阻止某人在未登录时尝试访问某个特定网页的确切方式,请说明页面viewProfile.php。网站如何知道允许访问此页面的人员?

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

感谢。

5 个答案:

答案 0 :(得分:6)

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

当您访问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,会话值得到的每个请求都会增加,所以你应该看到类似的东西:

  • 您已访问此网站 1 次。
  • 您已访问此网站 2 次。
  • 您已访问此网站 3 次。
  • 您已访问此网站 4 次。
  • ...

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

正在研究它是搜索StackOverflow某些标签的商品,例如PHP和会话。

https://stackoverflow.com/questions/tagged/php+session

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

Purpose Of PHP Sessions and Cookies and Their Differences

答案 1 :(得分:1)

网站使用称为“cookie”的东西在您的计算机上存储信息。

此信息可以包含任何文本字符串,但在这种情况下,它可能是Facebook知道(可能存储在某个数据库中)与某个用户绑定的唯一ID。 Cookie只能由发送它们的网站和浏览器本身读取。

登录页面向脚本发送POST / GET请求,该脚本通常根据数据库中的数据检查用户名/密码组合。如果发现数据有效,则授予用户访问网站登录页面(登录后的页面)的权限,并存储cookie。如果不是,则会发回错误消息。

Cookie也可以拥有“生命周期”。这个寿命可以是任何东西:持续一定的秒数;直到你离开现场;直到你关闭浏览器;或永远(可能还有更多。)

发送cookie的网站也可以在cookie过期之前删除它。这就是大多数“注销”按钮的工作方式。

答案 2 :(得分:1)

  1. 要仅允许登录用户查看内容,您可以先检查他们是否已登录的标志,例如查找活动会话以及是否有一个告诉您已登录的标志(你控制的)。在页面顶部的PHP中,您可以简单地:

    <?php session_start();
        if(!isset($_SESSION['loggedin'])){
            header('Location: http://example.com/login.php');
        }    
    ?>
    

    会将未登录的用户重定向到登录页面。成功登录后,您应将$ _SESSION ['loggedin']设置为值。

  2. 要检查是否允许登录的人查看特定的个人资料,请查看该页面仅限于朋友的位置,如果是,请检查登录用户的ID是否在个人资料所有者的位置DB中的朋友字段。

答案 3 :(得分:0)

Google搜索“会话管理”。

<强>摘要

当您登录某个网站时,您会获得一个唯一ID。该id从数据库中提取数据,然后使用您的数据填充动态页面,例如viewProfile.php。因此,每个用户都会提取相同的文件viewProfile.php,但会根据其唯一ID获取不同的结果。

答案 4 :(得分:0)

使用cookies完成。当您登录时,该站点会将cookie放入您的浏览器一段时间(通常很长一段时间,以便您可以保持登录状态)。当您再次访问该站点时,您的浏览器会将cookie发送回站点(并且该站点会设置一个新的cookie)。在任何浏览器中,您都可以在选项中的某处找到Cookie列表。

如果您想了解更多关于cookie的信息,可以阅读维基百科:http://en.wikipedia.org/wiki/HTTP_cookie