使用PHP和Javascript正确登录屏幕

时间:2015-01-13 17:44:37

标签: javascript php jquery css twitter-bootstrap

我正在为一个College项目的登录屏幕工作。现在我有这两个文件。

的index.php

<html>

<head>  
    <meta charset = 'UTF-8'>
    <link rel="shortcut icon" href="images/favicon.ico"/>           
    <title>Sistema de Estágios - UFMS - Login</title>
    <link href = "css/bootstrap.css" rel = "stylesheet" >
    <link href = "css/index.css" rel = "stylesheet" >
    <script src="js/jquery-1.11.1.min.js"></script>

    <?php
    session_start(); // start session

    if(isset($_SESSION["sessioname"]))
    {
        if($_SESSION["session_time"] >= time()) //time hasn't expired
        {
            $_SESSION["session_time"] = time() + 60;
            header("Location:users.php"); /* Redirect browser */
            exit();
        }
    }

    ?>

    <script type="text/javascript">
        $(document).ready(function()
        {
            $("input").blur(function() // This makes the container's border turn red when it is empty 
            {
                if($(this).val() == "")
                {
                    $(this).css({"border" : "1px solid #F00"});
                }
            });

            $("#botao").click(function()
            {
                var cont = 0;
                $("#form input").each(function()
                {
                    if($(this).val() == "")
                    {
                        $(this).css({"border" : "1px solid #F00"});
                        cont++;
                    }   
                });

                if(cont == 0)
                {
                    $("#form").submit();
                }
            });
        });
    </script>

</head>

<body>
<center>
    <center>
        <div class = "container">   
            <div class = "principal"> 
                    <form id="form" name="form" method="post" action="entra.php">
                        <p>
                            <label for="a">Nome de Usuário:</label>
                            <input id="a" type  ="text" name="username" class="form-control"/><br/>
                            <label id="name_null" hidden="hidden">O campo deve ser preenchido</label>
                        </p>
                        <p>
                            <label for="b">Password:</label>
                            <input id="b" type="password" name="password" class="form-control"/><br/>
                            <label id="pass_null" hidden="hidden">O campo deve ser preenchido</label>
                        </p>
                            <buttom id="botao" name="Entrar" value="login" class="btn btn-primary" style="width: 100%;">Login</buttom>
                    </form>
                <label> <a href="register.php"><button class="btn">Cadastre-se</button></a> </label>

            </div>
        </div>
    </center>
</center>

</body>

entra.php

<html>
<head>
    <script src="js/jquery-1.11.1.min.js"></script>
</head>

<?php
require_once "config.php"; // include conection to database
$mysqli = new mysqli("localhost", "root", "", "sistema");

// verify if there is a person with the recived name
$Tipo = $_POST['tipo'];

$user_info = mysqli_query($mysqli,"SELECT * FROM users WHERE username='".addslashes($_POST['username'])."'");

if(mysqli_num_rows($user_info) != 0)
{
    $result = mysqli_fetch_array($user_info); // put the informations in an array
    if($result['password'] == sha1($_POST['password']))// if the password matches
    {
        session_start(); // começa a seesion
        header("Cache-control: private");
        $_SESSION["sessioname"] = $_POST['username'];
        $_SESSION["auto"] = $result["Tipo"];
        $_SESSION["id"]= $result["id"];
        $_SESSION["session_time"] = time() + 60;// expiration timne
        header("Location: users.php");
        die();
    }
    else
    { // else show an alert
        ?>
        <script type="text/javascript">
            alert("Senha incorreta");
        </script>
        <?php

        header("Location: index.php");
        die(); 
    }
}
header("Location: index.php");
?>

我正在寻找一种方法让登录操作发生在index.php而不是entra.php。 我也在寻找一种更好的方法来管理会话过期时间。类似于全局变量的东西,所以每当我想要为测试更改它时,我都不必在每个文件上更改它。

我对PHP很新,所以我很乐意接受你们的帮助。

2 个答案:

答案 0 :(得分:1)

只需将您的entra.php代码移至index.php文件,然后将表单Post action更改为index.php

<form id="form" name="form" method="post" action="index.php">

SESSION: 首先,使用session_start()启动会话并存储用户上次发出请求的时间

<?php
  $_SESSION['timeout'] = time();
?>

在后续请求中,检查他们提前多久提出请求(本例中为10分钟)

<?php
  if ($_SESSION['timeout'] + 10 * 60 < time()) {
     // session timed out
  } else {
     // session ok
  }
?>

最佳解决方案是实现您自己的会话超时。使用表示上次活动时间(即请求)的简单时间戳,并在每次请求时更新。

答案 1 :(得分:1)

一般管理设置的一个好方法是添加像config.php这样的文件,并将所有文件存储在那里。既然您已经拥有它,您可以将所有内容存储在其中。

$_CONFIG["SESSION_EXPIRATION_TIME"] = 86400;

然后你可以require_once它或将它包含在lib类中。 关于配置文件和不执行define("VAR", [val])的好处是你可以修改变量,如果你需要一个自定义配置(假设你有一个测试服务器和一个生产的,并且有不同的数据库与它们相关联 - 你可以轻松覆盖$_CONFIG。您无法对define做很多事情。

另外,更难(但有用)的是拥有一个名为index.php的通用文件并包含所有其他php文件(稍微将逻辑与视图分开(html代码))。

另外,执行mysqli_real_escape_string以防止对用户名进行SQL注入。

作为一般规则,将逻辑放在单独的文件中并将其包含在内是一个好主意,而不是在HTML中内嵌它。

如果您希望它是一个文件,您可以随时检查用户是否已记录以及您的变量是否存在。有点像。

if(isset($_SESSION["sessioname"]) && $_POST['password'] !== NULL) {
    //login code
}

然后将action='entra.php'更改为action='index.php'(或者,最好不要将其全部省略)。

当然,如果上面让你眯眼,你总是可以添加一个带有一些值的隐藏输入字段:)

哦,执行exit()后总是header('...')php - Should I call exit() after calling Location: header?

我希望有所帮助!

相关问题