php - 如何检查用户是否登录

标签 php cookies authentication

我已经为我正在为 Intranet 构建的内部网站构建了一个登录 php 表单。我将把几个不同的网站合并到一个登录系统下。我想看看如何检查用户是否已登录,如果他们直接访问其中一个网址,如果他们没有登录,则将其重定向到登录页面,然后在成功登录后重定向回初始页面。

我已将他们的用户名和密码记录到 cookie 中。我知道这并不安全,但这只是公司内部网上的一个内部网站。所以我不需要太多的安全感。登录系统只是跟踪每个用户在做什么。

这是我的登录代码,但现在我需要弄清楚如何检查用户是否在单独的网页上登录。

//get info from login form
if(isset($_POST['login'])) {

$username = $_POST['username'];
$password = $_POST['password'];
$rememberme = $_POST['rememberme'];

$username = mysqli_real_escape_string($connection, $username);
$password = mysqli_real_escape_string($connection, $password);
//query users table
$query = "SELECT * FROM users WHERE username = '{$username}' ";
$select_user_query = mysqli_query($connection, $query);

if(!$select_user_query) {

    die("Query failed" . mysqli_error($connection));

}
//loop through user info and assigning to variables
while($row = mysqli_fetch_array($select_user_query)) {

    $db_id = $row['user_id'];
    $db_username = $row['username'];
    $db_password = $row['user_password'];
    $db_firstname = $row['user_firstname'];
    $db_lastname = $row['user_lastname'];
    $db_role = $row['user_role'];

}

//validate username and password
if($username === $db_username && $password === $db_password) {
    //create cookie to remember user
    if(isset($rememberme)) {
        //set cookie to last one year
        setcookie('username', $_POST['username'], time()+60*60*24*365, '/', 'localhost');
        setcookie('password', md5($_POST['user_password']), time()+60*60*24*365, '/', 'localhost');
    } else {
        //cookie expires when browser closes
        setcookie('username', $_POST['username'], false, '/', 'localhost');
        setcookie('password', md5($_POST['user_password']), false, '/', 'localhost');   
    }

    //if user exists send to dashboard
    $_SESSION['username'] = $db_username;
    $_SESSION['user_firstname'] = $db_firstname;
    $_SESSION['user_lastname'] = $db_lastname;
    $_SESSION['user_role'] = $db_role;

    header("Location: ../dashboard.php ");

} else {

    header("Location: ../index.php");

}

}

最佳答案

以下是如何检查用户是否已登录,然后将其重定向到他们第一次访问的页面。

首先检查用户是否登录:

<?php

session_start();
if(!(isset($_SESSION['username'])))
{
    header("Location: index.php");
}

?>

然后将该文件包含在您将使用的所有网页中。另外,为该 URL 创建一个 session 。这将出现在页面顶部:

<?php include "includes/login-check.php"; ?>
<?php $_SESSION['url'] = $_SERVER['REQUEST_URI']; ?>
<?php ob_start(); ?>

然后在 HTML 正文中添加以下内容:

<input type="hidden" name="redirurl" value="<? echo $_SERVER['HTTP_REFERER']; ?>" />

然后在您的登录文件中检查 URL session :

    //check to see what page user first visited
    if(isset($_SESSION['url'])) {
        $url = $_SESSION['url'];
    } else {
        $url = "../index.php";
    }
    //redirect user to page they initially visited
    header("Location: $url");

这应该完全回答你的问题。

关于php - 如何检查用户是否登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571386/

相关文章:

c# - 某些页面上的 Cookie 为空,但其他页面上没有

node.js - 在 Node.js 上使用 Passport.js 和 React.js 前端进行身份验证

asp.net-mvc - ASP.NET MVC - WebSecurity 是如何工作的?

javascript - 在 ExtJS 组件中显示富文本

php - 如何对从 MySQL 调用的 HTML 表行进行排序

security - 用户登录安全 - 本地 cookie 与 session

objective-c - 我可以使用 NSURLCredentialStorage 进行 HTTP 基本身份验证吗?

php - 没有教义的 Symfony2 身份验证(登录)?

php - 如果存在数据,如何执行更新查询,否则将数据插入 Mysql?

php - 服务器端字体大小调整