我有一个非常简单的登录脚本。
<?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");
}
?>
任何帮助都会很棒!
最佳答案
首先,您的问题是您没有将 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
函数直接重定向用户
关于php - 登录 cookie 不在页面刷新时保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434238/