使用会话变量的PHP登录页面

时间:2017-07-07 11:09:53

标签: php session

我是php新手,尝试在不使用数据库的情况下通过会话创建登录页面,如果用户成功登录,它将被重定向到某个页面" portfolio.php“然后会话将在15之后过期分钟,但如果用户随机键入“portfolio.php”作为url,它将被重定向到登录页面。在用户成功登录后,它应该只重定向到该页面(" portfolio.php")。 这是我的" login.php"页面代码:

 <?php
session_start();
include("functions.php");
$message="";
if(count($_POST)>0) {
    if( $_POST["user_name"] == "admin" and $_POST["password"] == "admin-1") {
        $_SESSION["user_id"] = 1001;
        $_SESSION["user_name"] = $_POST["user_name"];
        $_SESSION['loggedin_time'] = time();  

    } else {
        $message = "Invalid Username or Password!";
    }
}
if(isset($_SESSION["user_id"])) {
    if(!isLoginSessionExpired()) {
        header("Location:portfolio.php");
    } else {
        header("Location:logout.php?session_expired=1");
    }
}
if(isset($_GET["session_expired"])) {
    $message = "Login Session is Expired. Please Login Again";
}
?>

portfolio.php代码:

<?php
session_start();
include("functions.php");
if(isset($_SESSION["user_id"])) {
    if(isLoginSessionExpired()) {
        header("Location:logout.php?session_expired=1");

    }
 }

?>

funcation.php代码:

<?php
function isLoginSessionExpired() {
    $login_session_duration = 10; 
    $current_time = time(); 
    if(isset($_SESSION['loggedin_time']) and isset($_SESSION["user_id"])){  
        if(((time() - $_SESSION['loggedin_time']) > $login_session_duration)){ 
            return true; 
        } 
    }
    return false;
}
?>

提前致谢。

2 个答案:

答案 0 :(得分:0)

我发现你没有在portfolio.php文件中设置任何检查。 尝试检查会话登录是否对您创建的每个php页面都有效。例如,在functions.php文件中添加会话助手:

function session_helper() {
  if(isset($_SESSION["user_id"])) {
      if(isLoginSessionExpired()) {
        header("Location:logout.php?session_expired=1");
      }
      // check valid user id?
      // session is fine, let the code continue
  } else {
    // no session user_id so redirect to login or 
    // any other welcome page

    header("Location:login.php");   
  }

}

然后您可以在所有文件中使用该方法,包括portfolio.php

<?php
    session_start();
    // the new functions.php file
    include("functions.php");
    session_helper();

    // more code
?>

如果您打算使用php应用程序,可以考虑使用Php Framework来处理很多东西并关心您可能不知道的安全问题,并提供内置的更安全的用户身份验证。

答案 1 :(得分:0)

我见过你的代码...... 您应该将$login_session_duration = 10;更改为$login_session_duration = 900; 15分钟

你的portfolio.php应该是:

<?php
session_start();
include("funcation.php");
if(isset($_SESSION["user_id"])) {
    if(isLoginSessionExpired()) {
        header("Location:login.php?session_expired=1");    
    }
 } else {
     header('Location:login/index(ur html input file)');
 }  

?>