我刚刚开始学习网页开发,现在有些事情让我感到困惑,网站如何控制您可以访问的内容并且无法访问。
例如,像Facebook这样的网站。当我第一次访问该网站时,它会显示一个登录表单,一旦我记录了我尝试访问的相同页面,现在显示与我相关的信息,我只能在登录后访问,我可以导航到不同的站点和然后回归谷歌,它仍然允许我使用,如果没有再次登录。
网站阻止某人在未登录时尝试访问某个特定网页的确切方式,请说明页面viewProfile.php
。网站如何知道允许访问此页面的人员?
我意识到这个问题可能看起来令人困惑和基本,但它只是在观看Facebook时发现的一些东西。
感谢。
答案 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,会话值得到的每个请求都会增加,所以你应该看到类似的东西:
会话文件对于每个访问者都是唯一的,这意味着当在PHP中使用会话变量时,它仅对该用户来说,所以每个人都有自己的会话。
正在研究它是搜索StackOverflow某些标签的商品,例如PHP和会话。
https://stackoverflow.com/questions/tagged/php+session
这是一个关于cookie和会话优势等的好问题。
答案 1 :(得分:1)
网站使用称为“cookie”的东西在您的计算机上存储信息。
此信息可以包含任何文本字符串,但在这种情况下,它可能是Facebook知道(可能存储在某个数据库中)与某个用户绑定的唯一ID。 Cookie只能由发送它们的网站和浏览器本身读取。
登录页面向脚本发送POST / GET请求,该脚本通常根据数据库中的数据检查用户名/密码组合。如果发现数据有效,则授予用户访问网站登录页面(登录后的页面)的权限,并存储cookie。如果不是,则会发回错误消息。
Cookie也可以拥有“生命周期”。这个寿命可以是任何东西:持续一定的秒数;直到你离开现场;直到你关闭浏览器;或永远(可能还有更多。)
发送cookie的网站也可以在cookie过期之前删除它。这就是大多数“注销”按钮的工作方式。
答案 2 :(得分:1)
要仅允许登录用户查看内容,您可以先检查他们是否已登录的标志,例如查找活动会话以及是否有一个告诉您已登录的标志(你控制的)。在页面顶部的PHP中,您可以简单地:
<?php session_start();
if(!isset($_SESSION['loggedin'])){
header('Location: http://example.com/login.php');
}
?>
会将未登录的用户重定向到登录页面。成功登录后,您应将$ _SESSION ['loggedin']设置为值。
要检查是否允许登录的人查看特定的个人资料,请查看该页面仅限于朋友的位置,如果是,请检查登录用户的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