我有一个非常简单的登录脚本。
<?php
$username = "######";
$password = "######";
$hostname = "######";
$dbhandle = mysql_connect($hostname, $username, $password) or die("Could not connect to database");
$selected = mysql_select_db("logindashboard", $dbhandle);
$myusername = $_POST['user'];
$mypassword = $_POST['pass'];
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$query = "SELECT * FROM logindashboard.login WHERE user='$myusername' and pass='$mypassword'";
$result = mysql_query($query);
$count = mysql_num_rows($result);
mysql_close();
if($count==1){
$seconds = 5 + time();
setcookie(loggedin, date("F jS - g:i a"), $seconds);
header("location:index2.php");
}else{
echo 'Incorrect Username or Password';
}
?>
当用户登录并被带到我的主页时。他们登录,但页面设置为使用元刷新后45秒刷新。
<META HTTP-EQUIV="REFRESH"CONTENT="45;URL=index2.php">
唯一的问题是,45秒后它们似乎被带回登录界面,而不是它们已经在的页面。
这是我在页面顶部的index2.php文件中使用的内容。
<?php require_once('../../../.config2.php');
if(!isset($_COOKIE['loggedin'])){
header("location:index.php");
}
?>
任何帮助都会很棒!
答案 0 :(得分:-1)
首先,您的问题是您没有将loggedin
包裹在撇号中。该行应如下所示,以正确设置登录cookie
setcookie('loggedin', date("F jS - g:i a"), $seconds);
现在你的脚本逻辑。不要使用cookie来检查用户是否被标记为loggedin
。我不知道任何用户/密码组合,并且可以通过手动设置名为loggedIn
的cookie来绕过您的脚本。
尝试使用sessions
检查用户是否已登录。 session
数据存储在服务器端,无法由客户端手动编辑。
// here connect to you db mysql_connect(...
// mysql_select_db(...
$user = mysql_real_escape_string( $_POST['user'] );
$pass = mysql_real_escape_string( $_POST['pass'] );
//query if user and pw is valid
$result = mysql_query("SELECT * FROM logindashboard.login WHERE user='".$user."' and pass='".$pass."'");
if( mysql_num_rows($result) == 1 ) {
$_SESSION['loggedIn'] = true;
header('Location: index2.php');
}
您的index2.php
看起来像这样
<?php
session_start();
if( ! $_SESSION['loggedIn'] ) {
// not logged in redirect direct to login page
header('Location: loginPage.php');
}
这比使用cookie更安全。如您所见,您不需要元标记来重定向用户。使用php header
函数直接重定向用户