如何在php中启动会话和重定向?

时间:2015-07-12 21:25:37

标签: php session login

您好controllerLoginUsu.php

<?php

require "dao/daoLoginUsu.php";  

class LoginUsuario{

    public function setDatos($aInput) {

        $obj = json_decode($aInput, true);

       $Dao = new daoLoginUsuario();
       $Dao->setDataDato($obj);

       $msj = $Dao->setDataDato($obj);


      if($msj === 'si'){
        return $msj;       
      }else{
        return $msj;
      }
   } 
}
?>

好吧,在$msj变量中,我得到了一个&#34; si&#34;或&#34;不&#34; ,这是查询的答案。

如果$msj是&#34; si&#34;我需要开始一个会话并重定向到http://localhost:8080/formulario_web/formulario/formulario_lazos.html

我只有在开始会话时才需要formulario_lazos.html

<!DOCTYPE html>
<html lang="es">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" type ="text/css" href="css/bootstrap.css">
        <link rel="stylesheet" type ="text/css" href="css_propio/boostrap.estilo.css">

        <link rel="stylesheet" type ="text/css" href="css_propio/boostrap.estilo.datepicker.css">
        <link rel="stylesheet" type ="text/css" href="css_propio/bootstrap.old.datepicker.css">

        <link rel="stylesheet" type ="text/css" href="css/boostrap.datepicker.css">
        <link rel="stylesheet" type ="text/css" href="css/bootstrap.min.css">
        <link rel="stylesheet" type ="text/css" media="all" href="css/bootstrap-select.min.css">

        <title>FORMULARIO</title>
    </head>

<body>



        <div id="main_container_id">

                <!--INICIO ENCABEZADO-->
                <div class="container-fluid" id="encabezado_container_id"></div>
                <!--FIN ENCABEZADO-->

                <!--INICIO CONTENEDOR OBLIGATORIO-->
                <div id="tarea_container_id"></div>
                <!--FIN CONTENEDOR OBLIGATORIO-->

                <!--INICIO CONTENEDOR INFORMACION DE REGISTRO-->
                <div class="container" id="informacion_de_registro_container_id"></div>
                <!--FIN CONTENEDOR INFORMACION DE REGISTRO-->

                <!--INICIO MODAL INGRESAR NUEVA TAREA-->
                <div id="modal_ingresar_tarea_id" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"></div>
                <!--FIN MODAL INGRESAR NUEVA TAREA-->       

                <!--INICIO MODAL DESCRIPCION TAREA-->
                <div id="modal_descripcion_tarea_id" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModal3Label"></div>
                <!--FIN MODAL INGRESAR NUEVA TAREA-->           

                <!--INICIO MODAL HISTORIAL-->
                <div id="modal_historial_tarea_id"  class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModal5Label"></div>
                <!--FIN MODAL HISTORIAL-->          

                <!--INICIO MODAL ELIMINAR TAREA-->
                <div id="modal_eliminar_tarea_id" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"></div>
                <!--FIN MODAL ELIMINAR TAREA-->

                <!--INICIO MODAL SELECCIONAR UNA TAREA-->
                <div id="modal_seleccionar_tarea_id"  class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModal2Label"></div>
                <!--FIN MODAL ELIMINAR TAREA-->             

                <!--INICIO MODAL ELIMINAR TAREA-->
                <div id="modal_descripcion_problema_id"  class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModal4Label"></div>
                <!--FIN MODAL ELIMINAR TAREA-->                         
        </div>





<!--JQUERY-->
<script src="js/jquery-1.11.2.min.js"></script>     
<script src="js/bootstrap.js"></script>
<script src="js/bootstrap-select.min.js"></script>
<script src="js/datepicker.js"></script>


<script src="js_propio/bootstrap-datepicker.js"></script>
<script src="js_propio/bootstrap-selectpicker.js"></script>
<script type="text/javascript" src="choona.js/choona.js"></script>
<script type="text/javascript" src="js/head.load.js"></script>
<script src="modulos/MainTarea.js"></script>

<script type="text/javascript">

$(document).ready( function() {

choona.startApp({
id : "main_container_id",
module : MainTarea,
config :  {
'urlBase' : ''
}
});
});

</script>
<!--FIN JQUERY-->

</body>
</html>

我不知道我是如何正确地做到这一点的。抱歉,我的英文。

编辑:我总是需要返回$ msj。

3 个答案:

答案 0 :(得分:1)

首先,您需要将formulario_lazos.html设为.php文件,以便在其中使用php代码。

$msg == "si"您需要使用session_start()启动会话的if条件中,然后使用header("Location: ...")重定向到您的网页。您可以将$msg附加到位置上的链接,稍后使用$_GET

在着陆页中使用它
     <?php

      require "dao/daoLoginUsu.php";  

      class LoginUsuario{

public function setDatos($aInput) {

    $obj = json_decode($aInput, true);

   $Dao = new daoLoginUsuario();
   $Dao->setDataDato($obj);

   $msj = $Dao->setDataDato($obj);


  if($msj === 'si'){
    session_start();
    header('Location: http://localhost:8080/formulario_web
   /formulario/formulario_lazos.php?msg='.$msg );

  }else{
    header('Locarion: another_location.html');
  }
      } 
     }
  ?>

在formulario_lazos.php中,通过在html代码的顶部添加一个php块来检查会话是否已经启动,确保会话状态不是NONE,如果是,则重定向到另一个页面:

       <?php

   if (session_status() == PHP_SESSION_NONE) {
header('Location: another_page.php');
  }

echo $_GET['msg'];
  ?>

答案 1 :(得分:1)

如何做到这一点的一个例子:

<?php
session_start();
if ($msj === 'si') {
    $_SESSION['msj'] = "si";
    return $msj;
    header("Location: /formulario_lazos.html");
    exit; // Exits the script, redirecting the user to the page above
}

formulario_lazos.html中,您需要

<?php
    session_start();
    if ($_SESSION['msj'] == "si") {
?> 
<!-- PUT YOUR HTML CODE FROM formulario_lazos.html HERE -->
<?php
    } else {
        echo "No session was set, you can't read this page!";
    }
?>

请记住,当您使用header(Location: ...);时,header之前不能有任何输出(空白,HTML或PHP中的回显),否则它将无效 - 并添加PHP警告在error_log中。如果需要在输出后重定向,则需要另一种重定向用户的方法。同样的事情适用于session_start(); - 它必须在任何输出之前被调用(这很好,没有理由为什么你以后可以把它放在后面 - 只需在打开你的PHP标签后放它)。

此外,如果您需要在此文件中使用PHP,则您的formulario_lazos.html文件必须是.php文件(不是.html)。

答案 2 :(得分:0)

试试这个: 在 controllerLoginUsu.php

<?php

require "dao/daoLoginUsu.php";  

class LoginUsuario{

    public function setDatos($aInput) {

        $obj = json_decode($aInput, true);

       $Dao = new daoLoginUsuario();
       $Dao->setDataDato($obj);

       $msj = $Dao->setDataDato($obj);


      if($msj === 'si'){
        if(empty(session_id())) //if not started we start it
             session_start();
         header('Location: http://localhost:8080/formulario_web/formulario/formulario_lazos.php' );     
      }else{
        return $msj;
      }
   } 
}
?>

然后将 formulario_lazos 改为 php 而不是 html 文件,因为我们需要检查会话的开头。 只需将此代码放在文件的最开头

即可
if(empty(session_id()))
  exit('No direct url access');

所以这种方式每当有人试图打开formulario_lazos.php时,我们会检查是否有开放会话,只有在我们有开会时才显示。