índex.php
当我在给出开始部分时在页面上输入用户凭据时validación.php
,会在创建会话的文件中验证信息并使用函数返回echo "<script> window.location.replace('index.php') </script>";
到初始页面,而不是显示用户输入的字段应该显示活动会话的数据,但它没有,就好像从文件返回时validación.php
会话已关闭。
注意:我知道使用输入的凭据在数据库中进行的验证是正确的,实际上在执行echo "secion activa ". $_SESSION['usuario'];
它时显示已经开始所述会话的用户,但是当返回索引时,会话似乎没有保持活动状态。
索引.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Insercion de registros</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.2/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<?php
require 'validation.php';
?>
<nav class="navbar navbar-default">
<div class="container">
<ul class="nav navbar-nav">
<li class="active"><a href="index.php">Inicio <span class="sr-only">(current)</span></a></li>
<li class=""><a href="index.php">Clientes <span class="sr-only">(current)</span></a></li>
</ul>
<form action="validation.php" method="post">
<?php
if (isset($_SESSION['usuario'])) { ?>
<br>
<div class="form-group text-right">
<?php echo $_SESSION['usuario']; ?>
<a href="cerrar_sesion.php" class="btn btn-danger btn-xs">Cerrar sesión</a>
</div>
<?php } else {
?>
<div class=" form-group text-right">
<div class="form-group"></div>
<form action="">
<input type="text" name="usuario" value="" PLACEHOLDER="Usuario">
<input type="password" name="password" PLACEHOLDER="Contraseña">
<button type="submit" name="enviar" class="btn btn-primary btn-xs">Ingresar</button>
<a href="#" class="btn btn-default btn-xs">Registrarse</a>
</form>
</div>
<?php } ?>
</form>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-lg-8">
<h3>Elija el típo de cliente</h3>
<select class="form-control" name="razon_social" id="option_tipo">
<option value="n/a">Seleccione una opción</option>
<option value="natural">Natural</option>
<option value="juridico">juridico</option>
</select>
<br>
<div id="formulario">
<div class="alert alert-warning">Por favor el tipo de solicitud que deséa registrar!</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="scripts.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>
验证.php
<?php
require 'conexion.php';
if (isset($_POST['enviar'])) {
$usuario = htmlentities(addslashes($_POST['usuario']));
$password = htmlentities(addslashes($_POST['password']));
if (!$usuario == null && !$password == null) {
$go = new validation();
$go->validate($usuario, $password);
} else {
echo "<script>alert ('Verifique los datos');</script>";
echo "<script> window.location.replace('index.php') </script>";
}
}
class validation
{
private $connection;
public function __construct()
{
$con = new conexion();
$this->connection = $con->getConnection();
}
public function validate($user, $pass)
{
try {
$statement = $this->connection->prepare("select * from login where usuario=:usuario and password=:password");
$statement->execute(array(':usuario' => $user, ':password' => $pass));
if ($statement->rowCount() != 0) {
session_start();
$_SESSION['usuario'] = $user;
echo "secion activa ". $_SESSION['usuario'];
//echo "<script> window.location.replace('index.php') </script>";
} else {
echo "<script>alert ('El usuario no existe');</script>";
echo "<script> window.location.replace('index.php') </script>";
}
} catch (Exception $e) {
echo "Error al ejecutar la consulta" . $e->getMessage();
}
}
}
错误
1.-
session_start()
必须在向浏览器发送任何其他内容之前调用,但validation.php
您在之后包含文件<body>
并且您已经将内容发送到浏览器(HTML
以上所有内容)。2.-
session_start
只有在发送的数据有效时才执行POST
,即会话永远不会恢复,因为它从未再次初始化。解决方案
1.-你应该移动
<?php require 'validation.php'; ?>
之前<!DOCTYPE html>
索引.php
2.-在服务器上
session_start
创建一个临时文件(取决于指示的生命周期),如果访问次数过多,则会适得其反。仅在验证用户后登录的一种方法是使用session_name
.验证.php
尝试按照朋友 Omar Miranda 的说法,将其放在文件的开头
index.php
在索引中声明
session_start()
它,使其保持活动状态,并且不要忘记将它放在整个系统的导航中。