Variables de sesion se pierden luego de ejecutar script
Publicado por Jonathan (40 intervenciones) el 24/03/2021 07:47:23
Estimados, tengo el siguiente proglema, estoy realizando pruebas para realizar ventas por intenet mediante Transbank (Chile), mi inconveniente es que luego de ejecutar el script que procesa la venta, se pierden las variables de sesion, deslogenado automaticamente al usuario al ser retornado a la pagina que muestra los reusltados de la venta o en ocaciones esto sucede en 2-3 minutos. Tengo un php llamado verify.php que comprueba que el usuario este logeado, de lo contrario se cierra la sesion. el error desaparece si no incluyo dicho archivo, pero no se porque motivo ocurre.
procesarventa.php
ventafinal.php donde se redirige al usuario luego de aceptar la venta
login.php
vefify.php
procesarventa.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
require_once '../vendor/autoload.php';include '../logica/conexion.php';
$con = new Conexion;
use Transbank\Webpay\Webpay;
use Transbank\Webpay\Configuration;
use Transbank\Webpay\WebPayNormal;
$urlRepository = "https://raw.githubusercontent.com/TransbankDevelopers/transbank-webpay-credenciales/master/";
$dirFiles = "integracion/Webpay%20Plus%20-%20CLP/597020000540";
$contentPublicCert = file_get_contents($urlRepository . $dirFiles . ".crt");
$contentPrivateKey = file_get_contents($urlRepository . $dirFiles . ".key");
$configuration = new Configuration();
$configuration->setCommerceCode(597020000540);
$configuration->setEnvironment("INTEGRACION");
$configuration->setPrivateKey($contentPrivateKey);
$configuration->setPublicCert($contentPublicCert);
$webpay = new Webpay($configuration);
$transaction = $webpay->getNormalTransaction();
$tokenWs = filter_input(INPUT_POST,'token_ws');
$result = $transaction->getTransactionResult($tokenWs);
$output = $result->detailOutput;
$comercio = 'WebPay';
$total = $output->amount;
$query_cantidad = $con->obtenerdatos("cantidad","escala_creditos","total = ?",array($total));
$cantidad = $query_cantidad[0]['cantidad'];
$fechaautorizacion = DateTime::createFromFormat('Y-m-d\TH:i:s.uT',$result->transactionDate);
$fechaautorizacion->setTimezone(new DateTimeZone('America/Santiago'));
$fecha = $fechaautorizacion->format('Y-m-d H:i:s');
$ordencompra = $output->buyOrder;
$codigoautorizacion = $output->authorizationCode;
$numerotarjeta = str_pad($result->cardDetail->cardNumber, 16, "X", STR_PAD_LEFT);
$idusuario = 'USER10001'
if($output->sharesNumber == 0){
$numerocuotas = 0;
$montocuotas = 0;
}else{
$numerocuotas = $output->sharesNumber;
$montocuotas = $output->sharesAmount;
}
if($output->paymentTypeCode == 'VD'){
$tipoventa = 'Débito';
}elseif($output->paymentTypeCode == 'VN'){
$tipoventa = 'Normal';
}elseif($output->paymentTypeCode == 'VC'){
$tipoventa = 'En Cuotas';
}elseif($output->paymentTypeCode == 'SI' or $output->paymentTypeCode == 'S2' or $output->paymentTypeCode == 'NC'){
$tipoventa = 'Cuotas S/I';
}elseif($output->paymentTypeCode == 'VP'){
$tipoventa = 'Prepago';
}else{
$tipoventa = '';
}
if ($output->responseCode == 0) {
echo ' <script>
window.localStorage.clear();
window.localStorage.setItem("result",JSON.stringify('.json_encode($result).'));
</script>';
$query = $con->insertar("?,?,?,?,?,?,?,?,?,?,?,?,?","creditos",array($ordencompra,$codigoautorizacion,$numerotarjeta,$numerocuotas,$montocuotas,$tipoventa,$total,$cantidad,$fecha,"Aprobada","123",$comercio,$idusuario));
$query_creditos = $con->actualizar("creditos = creditos + ?","usuarios","idusuario = ?",array($cantidad,$idusuario));
}
?>
<?php if($output->responseCode == 0){?>
<form action="<?php echo $result->urlRedirection?>" method="post" id="return-form">
<input type="hidden" name="token_ws" value="<?php echo $tokenWs;?>">
</form>
<script>
document.getElementById('return-form').submit();
</script>
<?php }?>
ventafinal.php donde se redirige al usuario luego de aceptar la venta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php $raiz = "../"; include $raiz.'logica/verify.php'; $titulo = "Portal - Comprar Creditos"; $titulo2 = "PORTAL CRÉDITOS";include $raiz.'header2.php';?>
<div class="row">
<div class="col-lg-6">
<table class="table tablas table-borderless table-sm tabla_5 m-0" cellspacing="0" width="100%">
<tbody>
<tr><td>Orden de Compra</td><td id="precio"></td></tr>
<tr><td>Código de Autorización</td><td id="codigoautorizacion"></td></tr>
<tr><td>Orden de Compra</td><td id="precio"></td></tr>
<tr><td>Orden de Compra</td><td id="precio"></td></tr>
</tbody>
</table>
<p>Tarjeta <span id="numerotarjeta"></span></p>
<p>N° Orden <span id="ordencompra"></span></p>
<p>Tipo Pago <span id="tipopago"></span></p>
<p>Fecha Transacción <span id="fechatransaccion"></span></p>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function(e) {
let result = JSON.parse(window.localStorage.getItem("result"));
document.getElementById('precio').innerText = result.detailOutput.amount;
document.getElementById('codigoautorizacion').innerText = result.detailOutput.authorizationCode;
document.getElementById('numerotarjeta').innerText = result.cardDetail.cardNumber;
document.getElementById('ordencompra').innerText = result.detailOutput.buyOrder;
document.getElementById('tipopago').innerText = result.detailOutput.paymentTypeCode;
document.getElementById('fechatransaccion').innerText = result.transactionDate;
});
</script>
<?php include $raiz.'footer2.php';?>
login.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
include 'conexion.php';
$con = new Conexion();
session_set_save_handler(new \SessionHandler());
session_start();
$error = '';
if (isset($_POST['submit'])) {
if (empty($_POST['usuario']) || empty($_POST['clave'])) {
$error = "Por favor ingrese un usuario y contraseña validos";
}else{
$usuario = $_POST['usuario'];
$clave = $_POST['clave'];
$datos = $con->obtenerdatos("correo,clave,nombre,apellido,sid,idusuario","usuarios","correo = ?",array($usuario));
if (count($datos) > 0){
$fila = $datos[0];
$clave = $fila['clave'];
if(password_verify($_POST['clave'],$clave)){
date_default_timezone_set("America/Santiago");
$_SESSION['fecha'] = date("Y-m-d G:i:s");
$_SESSION['correo'] = $fila['correo'];
$_SESSION['nombre'] = $fila['nombre'];
$_SESSION['apellido'] = $fila['apellido'];
$_SESSION['idusuario'] = $fila['idusuario'];
$_SESSION['sesion-start'] = time();
$_SESSION['sesion-expire'] = $_SESSION['sesion-start'] + (15 * 60);
$sessionID = $fila['sid'];
$actualizar = $con->actualizar("sesion_expira = ?,sid = ?","usuarios","CURRENT_TIMESTAMP > sesion_expira",array(NULL,NULL));
(new \SessionHandler())->destroy($sessionID);
$_SESSION['sid'] = session_id();
$sid = $con->actualizar("sesion_inicia = ?,sesion_expira = ?,sid = ?","usuarios","correo = ?",array(date('Y-m-d H:i:s',$_SESSION['sesion-start']), date('Y-m-d H:i:s',$_SESSION['sesion-expire']), $_SESSION['sid'], $_SESSION['correo']));
header("location: ../profile");
exit();
}else{
$error = 'La contraseña ingresada no es valida';
}
}else{
$error = "El usuario ingresado no existe";
}
}
}
?>
vefify.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
session_start();
setlocale(LC_ALL,"es_ES");
include "conexion.php";
$con = new Conexion();
if(!isset($_SESSION['correo'])){
$con->desconectar();
header('Location: '.$raiz.'login');
}else{
$ahora = time();
if($ahora > $_SESSION['sesion-expire']){
$liberar = $con->actualizar("sid = ?","usuarios","correo = ?",array(NULL,$_SESSION['correo']));
unset($_SESSION['fecha']);
unset($_SESSION['nombre']);
unset($_SESSION['apellido']);
unset($_SESSION['sesion-start']);
unset($_SESSION['sesion-expire']);
$con->desconectar();
session_regenerate_id();
session_destroy();
header('Location: '.$raiz.'login');
}else{
date_default_timezone_set("America/Santiago");
$_SESSION['sesion-expire'] = time() + (15 * 60);
$actualizar = $con->actualizar("sesion_expira = ?","usuarios","correo = ?",array(date('Y-m-d H:i:s',$_SESSION['sesion-expire']), $_SESSION['correo']));
$inactivos = $con->actualizar("sesion_expira = ?,sid= ?","usuarios","CURRENT_TIMESTAMP > sesion_expira",array(NULL,NULL));
}
}
?>
Valora esta pregunta


0