【问题标题】:How can I start a session and redirect in php?如何在 php 中启动会话并重定向?
【发布时间】:2015-07-12 21:25:37
【问题描述】:

嗨,我有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 变量中,我得到一个 "si" 或 "no" ,这是查询的答案。

如果$msj 是“si”,我需要启动一个会话并重定向到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。

【问题讨论】:

    标签: php session login


    【解决方案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 之前有任何输出(PHP 中的空格、HTML 或回显),否则它将不起作用 - 并在您的 @987654327 中添加 PHP 警告@。如果您需要在输出后重定向,您将需要另一种重定向用户的方式。同样的事情也适用于session_start(); - 它必须在任何输出之前被调用(这很好,你没有理由稍后再放它 - 只需在打开你的 PHP 标记之后放它)。

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

    【讨论】:

    • 嘿! ..如果我更改为 formulario_lazos.php 这可以工作,如果我不开始会话则不工作,但我还不能重定向..我还不太明白,我有这个:session_start(); if ($msj === 'si') { $_SESSION['msj'] = "si";返回 $msj; header("位置:localhost:8080/formulario_web/formulario/…); exit; }
    • 当然你必须在both文件中session_start();。此外,您的header("Location: ..."); 必须在 任何输出之前调用(正如我在帖子中所写的那样)。没有 HTML 代码,没有 PHP 中的回显——什么都没有。如果你有这个,你需要找到另一种重定向的解决方案。
    【解决方案2】:

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

    $msg == "si" 的if 条件下,您需要使用session_start() 启动会话,然后使用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'];
      ?>
    

    【讨论】:

      【解决方案3】:

      试试这个: 在 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 时,我们都会检查我们是否有打开的会话,并且只有当我们有时才显示它。

      【讨论】:

        猜你喜欢
        • 2012-01-30
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 2019-01-02
        • 1970-01-01
        相关资源
        最近更新 更多