我是新来的网络编程和即时通讯尝试找到一些很好的例子/教程如何做一个体面的工作创建一个网站,要求用户登录查看主日志之外的任何页面在页面中。php密码保护网站
到目前为止,我发现1或2,我尝试过,但我一直遇到同样的问题。如果我只是输入我想要手动查看的页面的网址,我可以进去,就像没有任何东西。
我是新来的网络编程和即时通讯尝试找到一些很好的例子/教程如何做一个体面的工作创建一个网站,要求用户登录查看主日志之外的任何页面在页面中。php密码保护网站
到目前为止,我发现1或2,我尝试过,但我一直遇到同样的问题。如果我只是输入我想要手动查看的页面的网址,我可以进去,就像没有任何东西。
有HTTP验证:
http://php.net/manual/en/features.http-auth.php
或者你可以用一个登录表单和会话跟踪滚你自己:
http://www.php.net/manual/en/book.session.php。
Http auth表示用户获得一个弹出式对话窗口,询问用户名和密码,它比自卷版本更不常用。
享受!
它不使用PHP进行身份验证,但您可以使用htaccess的提供认证和使用PHP可能管理htpasswd文件:
他想要php,而不是apache配置,不要下主题 – 2010-08-09 23:05:11
他说他是网络编程的新手,他正在寻找一种创建网站的方法,要求用户登录才能查看超出主网页的任何页面登录页面。 .htaccess是这样做的一种方法,他可能没有想到。他从来没有说过解决方案必须在PHP中。 – 2010-08-10 14:49:08
我仍然想要做php,但是这会帮助我完成一个不同的项目,所以对于这个想法+1(我不知道谁是你) – Crash893 2010-08-10 14:50:22
你提到的网站很可能因为旁路过安全检查的页面不保存,然后检查每一页上的登录状态。在访问页面之前,您需要检查访问者是否已登录。
我想大多数用户都希望登录时输入表单。如果您希望用户在会话过期后回来并使用同一帐户登录,则需要数据库来存储用户信息。
将用户信息存储在数据库中时,您可能实际上也不应该存储其密码。举一个例子:
name password ...
-----------------------------------------------
Johnny '3858f62230ac3c915f300c664312c63f'
Alice '80338e79d2ca9b9c090ebaaa2ef293c7'
.
.
.
约翰尼的密码实际上是“foobar的”,但数据库存储md5('foobar')
。当Johnny尝试登录时,他输入他的用户名('Johnny')和他的密码('foobar')。在PHP中,你凑他输入的密码,并从数据库中调出他的密码值,从而导致:
if (md5('foobar') == '3858f62230ac3c915f300c664312c63f')
此条件是true
。您可以确认他是否正确登录,但您永远不会存储他的实际密码。
爱丽丝的密码是'foobaz'。她试图登录,但不小心输入了'foobar',Johnny的密码。这导致:
if(md5('foobar') == '80338e79d2ca9b9c090ebaaa2ef293c7')
这是false
。再一次,你不知道Alice的密码是,只是她输入了错误的密码。
当然,这种策略的缺点是,当他们忘记密码时,你无法告诉用户他们的密码 - 你不知道!您可以通过让用户将其密码重置为来解决此问题(对某些半随机字符串),而不是直接告诉他们密码是什么。
请注意,如果你不得不为每个用户存储单独的信息。如果你只是需要某些人看到部分或整个网站,这可能是矫枉过正的。 – williamg 2010-08-09 22:08:04
使用表单登录时,应该检查数据库中的用户名和密码。密码应该被加密(通常使用MD5哈希算法完成),并以相同的方式存储在数据库中。您捕捉的变量,使用类似(使用一些验证检查,如果POST变量是有效的):
$username = $_POST['username'];
$passwordHash = md5($_POST['password']);
用户名和散列密码应存储在数据库中。然后,您可以检查使用数据库匹配:
$res = mysql_query("SELECT * FROM users WHERE username='".$username."' && password='".$password."'");
当用户发现,使用会话来存储用户值,这将让你可以访问跨页一个用户的信息。注意:session_start()
通常放置在页面的顶部,但为了便于阅读,我将它放在此处。
if (mysql_num_rows($res)) {
session_start();
session_regenerate_id(); // regenerate session_id to help prevent session hijacking
$row = mysql_fetch_assoc($res);
$_SESSION['logged_on'] = true;
$_SESSION['username'] = $row['username'];
// add more session variables about the user as needed
}
在要保护的每一页,添加以下这些页面的顶部:
session_start();
if (!isset($_SESSION['logged_on'])) {
header("Location: login.php"); // user is not logged in, redirect to login page
exit;
}
// page content here
好吧,我会解释的基本概念如何去和一个非常简单的实现,以让事情继续下去。
PHP(以及大多数Web应用程序)依赖于RESTful服务 - 这是我们目前关注的问题,意味着每个请求都不会受到任何其他请求的远程绑定 - 无论是由同一用户还是其他用户。
那么这是什么意思?
这意味着对于每一个请求,你都需要做检查。您需要确保用户是否有权执行该页面,或者甚至看不到其内容。
这是如何实现的?
实际上有很多种方式。有很多技术用于强制Web应用程序的授权,但它们基本上都会分解为两个中的一个 - 无论是集中还是分散。
- 集中
这意味着你的所有行动(和控制器)正在通过一个单一的文件来处理。说index.php。然后,该文件将根据请求参数将其任务包括或委托给其他文件(不能通过普通请求自行运行)。这是一种非常受欢迎的方法,但对于新开发人员来说并不是直截了当的。使用这种方法的应用程序的示例将具有以下类型的URL:index.php?do = register,index.php?do = login,index.php?do = showtopic & topic_id = 2等等。
一个简单的实现这一技术的会是这样的:
<?php
// index.php
define('RUNNING_APP', true);
// 1. place your auth code here, or...
switch ($_REQUEST['do']) {
case 'register':
// 2. or here
include 'inc/register.php';
break;
case 'do_register':
// 2. and here, and before every include.. and so forth.
include 'inc/do_register.php';
break;
}
?>
<?php
// inc/register.php
defined('RUNNING_APP') or die('Cannot access this script directly'); // make sure to break direct access
?>
<form action="index.php?do=do_register">
<!-- form elements -->
</form>
等等。
我已经记录了通常的认证代码应该去的地方。
- 分散
使用这种方法,但是,您的授权码应该在每一个文件的开头。这种应用程序的URL通常类似于:register.php,login.php等等。这里的主要问题是,如上所述,您需要为每个文件执行所有认证逻辑,并且如果您的文件数量增加,这可能是一件繁忙的工作。一个方便的解决方案是将这个逻辑放在一个单独的文件中,然后在你的任何逻辑之前包含该文件(这会杀死对非法人员的请求)。一个简单的例子是:
<?php
// index.php
include('inc/auth.php');
// index logic
?>
<?php
// register.php
include 'inc/auth.php';
// register logic
?>
<?php
// inc/auth.php
$logged_in = false;
if (!$logged_in) {
die ('You do not have permission to access this page. Please login');
}
?>
这是tutoral香港专业教育学院迄今下,我不认为它的工作 http://www.phpeasystep.com/phptu/6.html – Crash893 2010-08-09 21:40:51
也许我看错问题是,你是否需要一个全功能的用户登录系统(例如,不同的用户需要看到不同的东西),还是你不希望每个人都能够查看你的网站?在我看来,htaccess是要走的路。 – williamg 2010-08-09 22:34:20
我希望能够让用户和管理员以及超级用户拥有 – Crash893 2010-08-10 04:54:40