我正在为一个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很新,所以我很乐意接受你们的帮助。
答案 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?
我希望有所帮助!