11

我创建了一个很好用的登录表单。但是我意识到我的用户被定向到的页面仍然可以被任何人访问。如何保护只有登录者才能访问的页面?

我需要在成功页面本身上放置一个脚本吗?

这是我的 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");
 }
 ?>
4

5 回答 5

9

您的每个页面都应以

session_start();

并且您不应该使用session_register( "variablename" )PHP 4.2 版,使用

$_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");
}
?>
于 2011-07-24T22:56:42.190 回答
4

在要求用户登录的页面上检查他们是否有有效的会话。如果没有将它们发送到登录页面。

if (!$_SESSION['myusername'])  
{  
    header('location: /login.php');  
    exit;  
}
于 2011-07-24T22:48:55.767 回答
2

在每个访问受限的页面/内容中,您应该对客户端/用户进行身份验证。如果人们疯了,那么您必须让用户在每个页面中填写他的详细信息(用户名/密码),但是感谢“HTTP cookie” - 我们不必这样做。

于 2011-07-24T22:47:51.693 回答
1

您基本上应该使用会话管理来跟踪用户是否处于经过身份验证的会话中。如果没有,您(重新)将它们引导到索引页面;如果是,您授予他们访问他们请求的任何资源的权限。

要使用会话,请将会话设置函数放在应用程序内每个 PHP 脚本session_start()的顶部(设置函数包括会话处理程序、cookie 域和 cookie 名称),然后说. 然后,检查当前会话中是否定义了登录标志,例如$_SESSION["user_is_logged_in"]. 在身份验证页面中,您当然会$_SESSION["user_is_logged_in"] = true;在某个阶段进行定义。

于 2011-07-24T22:54:31.487 回答
0

建议将访问数据外包给数据库。我将其保存为“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();
}
?>
于 2021-10-06T09:49:02.690 回答