php - 登录 cookie 不在页面刷新时保存

标签 php html cookies authentication login-script

我有一个非常简单的登录脚本。

<?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/

相关文章:

javascript - php 不是 "echo-ing"javascript 正确

php - 我如何在 PHP 中使用 javascript decodeURI?

php - 如何拆分一个字符串并找到一个字符串在另一个字符串中的出现?

php - 共享 Apache 2.0 模块与静态 Apache 模块

html - 为什么 css "overflow: scroll"不起作用并且滚动条不显示?

javascript - 使用 html5 可拖动属性时保留拖动 A 元素的外观

html - 如何在DIV中居中DIV?

javascript - 将表单数据保存到 cookie

javascript - 检查 cookie 是否存在不工作

asp.net - 关闭浏览器后删除身份验证/ session cookie