[英]How do I protect a page only for logged users?
我创建了一个非常有用的登录表单。 但我意识到我的用户被定向到的页面仍然可以被任何人访问。 如何保护正在访问的页面仅供登录者查看?
我是否需要在成功页面本身放置一个脚本?
这是我的 check_login.php:
<?php
$host="localhost"; // Host name
$username="xxx"; // Mysql username
$password="xxx"; // Mysql password
$db_name="xxx"; // Database name
$tbl_name="xxx"; // Table name
// Connect to server and select database.
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
$user_info = mysql_fetch_assoc($result);
if( isset($user_info['url']) ) {
session_register("myusername");
session_register("mypassword");
header('Location: ' . $user_info['url']); //Redirects to the supplied url from the DB
} else {
header("location:error.htm");
}
?>
您的每一页都应该以
session_start();
从PHP 4.2开始,您不应该使用session_register( "variablename" )
,请使用
$_SESSION["variable"] = value;
因此带有is-logged-it检查的示例页面为:
<?php
session_start();
if($_SESSION["loggedIn"] != true) {
echo("Access denied!");
exit();
}
echo("Enter my lord!");
?>
和登录脚本:
<?php
/*
... db stuff ...
*/
if( isset($user_info['url']) ) {
$_SESSION["loggedIn"] = true;
$_SESSION["username"] = $myusername;
header('Location: ' . $user_info['url']); //Redirects to the supplied url from the DB
} else {
header("Location: error.htm");
}
?>
在要求用户登录的页面上,检查他们是否具有有效的会话。 如果没有,请将其发送到登录页面。
if (!$_SESSION['myusername'])
{
header('location: /login.php');
exit;
}
在访问受限的每个页面/内容中,您应该对客户端/用户进行身份验证。 如果人们发疯了,那么您必须让用户在每个页面中填写其详细信息(用户名/密码),但是由于有了“ HTTP cookie”,我们不必这样做。
基本上,您应该使用会话管理来跟踪用户是否处于经过身份验证的会话中。 如果不是,则将它们重定向到索引页面; 如果是,则授予他们访问他们所请求资源的权限。
要使用会话,请将会话设置功能放在应用程序中每个PHP脚本的顶部(设置功能包括会话处理程序,cookie域和cookie名称),然后说session_start()
。 然后,检查是否在当前会话中定义了登录标志,例如$_SESSION["user_is_logged_in"]
。 在身份验证页面中,您当然可以定义$_SESSION["user_is_logged_in"] = true;
在某个阶段。
建议将访问数据外包给数据库。 我将其保存为“config.php”:
<?php
/* include of the access data */
require_once("yourPath/config.php");
/* Connection establishment */
try {
$mysql = new PDO("mysql:host=$host;dbname=$name", $user, $passwort);
} catch (PDOException $e) {
echo "SQL Error: " . $e->getMessage();
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.