我在PHP中创建了一个工作正常的登录表单,但我已经意识到我的用户指向的页面仍然可以被任何人访问。如何继续保护页面只能由登录该站点的用户访问?
我是否需要在成功页面上放置脚本?
我尝试了很多不同的东西,但不确定发生了什么。这是我到目前为止所拥有的!
checking_login.php
<?php
ob_start();
$host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name=""; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Define $myusername and $mypassword
$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);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION['username'] = $myusername;
$_SESSION['password'] = $mypassword;
header("location: portkey.php");
}
else {
echo "Wrong Username or Password. ";
}
ob_end_flush();
?>
以下是我在谈论重定向页面的页面部分。 (它仍然向所有人公开)。
<?php
session_start();
$host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="members"; // Table name
session_start();
if(!isset($_SESSION['myusername'])) {
header("location:login.php");
}
?>
登录是包含表单的页面。表/用户。
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1">
<tr>
<form name="form1" method="post" action="checking.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1">
<tr>
</tr>
<tr>
<td width="78">Username</td>
<td width="0">:</td>
<td width="294"><input name="myusername" type="text" id="myusername"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="text" id="mypassword"></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>
答案 0 :(得分:0)
您需要检查username
是否设置:
if(!isset($_SESSION['username'])) {
header("location:login.php");
}
此外,您要拨打session_start();
两次。然而,第二个电话将被忽略。
提示:您应该将用户id
存储在会话中,而不是存储用户名和密码。
答案 1 :(得分:0)
您无法在checking_login.php
上开始会话。将您的代码更改为:
session_start();
$_SESSION['username'] = $myusername;
$_SESSION['password'] = $mypassword;
您无需在受保护的页面上两次启动会话。删除session_start();
语句上方的if
。
此外...在受保护的网页上,您正在检查不存在的会话!将if(!isset($_SESSION['myusername'])) {
更改为if(!isset($_SESSION['username'])) {
答案 2 :(得分:0)
您的仅限会员的页面仍然可见并且任何人都可以访问的原因是,因为您没有正确检查,是否设置了user session
。
要使代码正常工作,您需要更改条件语句:
if(!isset($_SESSION['myusername'])) {
header("location:login.php");
}
为:
if(!isset($_SESSION['username'])) {
header("location: login.php");
}
因为myusername
不是您存储在会话中的变量。
引用$_SESSION
的设置:
$ _ SESSION [&#39;用户名&#39;] = $ myusername;
当您设置$_SESSION
时,您使用了username
而不是myusername
。检查是否设置了$_SESSION
时,请务必坚持。
为了让您的页面按照您的意愿工作,您必须使用以下格式:
<?php session_start(); ?>
<!DOCTYPE html>
<html>
<head></head>
<body>
<?php
// Check if user session is set. If it is redirect to login.php.
if(!isset($_SESSION['username'])):
header("location: login.php");
// If it is not set show the your login form.
else:
?>
<!--Your HTML code for the form.-->
<?php
endif;
?>
</body>
</html>
如果您的登录表单位于其他页面中,则可以通过更改else
部分重新定向,如下所示:
// If it is not set show the your login form.
else:
header("location: loginform.php"); // The name of the file
endif;
答案 3 :(得分:0)
如果您有全局header.php
文件,则在该检查中是否设置了$_SESSION['username']
。如果是,请设置$logged_in = true
,如果不是,请设置$logged_in = false
。它是我用于我的网站的东西。如果您不使用header.php
,请在页面中检查$_SESSION['username']
。对于两者,如果是$looged_in = true
或isset($_SESSION['username'])
,那么DON&#39; T重定向。但是如果$logged_in = false
或!isset($_SESSION['username'])
,那么您会重定向它们。您还可以设置$_SESSION['logged_in']
变量。
一些帮助的代码。
header('location: page.php'); // REDIRECT VIA PHP
// IF YOU HAVE header.php
if(isset($_SESSION['username'])) $logged_in = true; // IN herder.php
else $logged_in = false; // IN herder.php
if($logged_in != true) header('location: login.php') // IN USERS ONLY PAGE
// IF YOU DON'T HAVE header.php
// OPTION 1
if(!isset($_SESSION['username'])) header('location: login.php'); // IN USERS ONLY PAGE
// OPTION 2
$_SESSION['logged_in'] = true; // WHEN THE USER HAS LOGGED IN
if($_SESSION['logged_in'] != true) header('location: login.php'); // IN USERS ONLY PAGE