Почему у меня есть разные session_id на каждой странице сайта? - PullRequest
0 голосов
/ 09 февраля 2019

Я создал сайт php (MVC) версии 5.6.30.Я добавил session_start () в index.php, но каждый раз, когда я меняю страницу, это меняет session_id (), портя хранимые переменные.

Это файл index.php, который создает соединение с базой данных и создаетконтроллер на основе полученного URL.

    <?php
        chdir(dirname(__DIR__));
        require_once __DIR__ .'/../core/Domanda.php';
        session_start();
        session_id();
        require_once __DIR__.'/../helpers/class.smtp.php';
        require_once __DIR__.'/../helpers/class.phpmailer.php';


        require_once __DIR__.'/../DB/DBPDO.php';

        require_once __DIR__ .'/../DB/DbFactory.php';

        require_once __DIR__.'/../config/tfpdf.php';

        require_once __DIR__.'/../config/PDF.php';

        require_once __DIR__ . '/../app/controllers/PostController.php';
    ecc..

$controller->display();

это файл controller.php, который определяет, какой метод и выполняет различные вызовы с использованием почтовой модели

     class PostController extends BaseController{
          protected $layout = 'layout/index2.tpl.php';
  public $content ='Controller';

 protected $conn;
          protected $Post ;

          public function __construct(PDO $conn) {
         $this->conn=$conn;
            $this->Post = new Post($conn);

          }

public function display(){
    require  $this->layout;
  } 


          public function getArticles(){ //home
            global $page;
            $posts = $this->Post->all($page);
            $evento = $this->Post->allPosts(1);
            $articoliTOT = $this->Post->countArticoli();

            $this->content =  viewSidebar('articoliHome', compact('posts'), $this->sidebar,$this->lingua, compact('evento'), $articoliTOT->total);
          }

это файл модели, который запрашивает базу данных

<?php
namespace App\Models;
use \PDO;
use \PDF;
use \PHPMailer;
class Post extends Base{


    public function __construct(PDO $conn) {
        parent::__construct($conn);
    }

    public function all($page){
        $result = [];
        $RECORDS_PER_PAGE=RECORDS_PER_PAGE+1;
        $start= $RECORDS_PER_PAGE * ($page -1);
          if($start< 0) {
              $start = 0;
          }

        $sql = 'SELECT * FROM articoli_'.$_SESSION['lan'].' WHERE tipo >=3 ORDER BY art_data DESC LIMIT ? , ?';
        $stm = $this->conn->prepare($sql);
        $stm->bindParam(1, $start, PDO::PARAM_INT);
        $stm->bindParam(2, $RECORDS_PER_PAGE, PDO::PARAM_INT);
        $stm->execute();

        if($stm && $stm->rowCount()){

            $result =  $stm->fetchAll(PDO::FETCH_OBJ);
        }

        return $result;

    }

functions.php

function viewSidebar($view, array $data = [], $sidebar, $lingua, array $dataSB = [], $articoliTOT){ //5
  global $page;
  extract($data);
  extract($dataSB);
  ob_start();
  require __DIR__ .'/../app/views/'.$view.'.tpl.php';
  $output =  ob_get_contents();
  ob_end_clean();
  return $output;
}

index2.php

<?php
require_once (__DIR__.'/../layout/header.tpl.php');
require_once (__DIR__.'/../layout/nav.tpl.php');
?>
     <div id="contenuto" class="row mx-3 my-3">

    <?=$this->content?>
  </div>


</div>

<?php
require_once (__DIR__.'/../layout/footer.tpl.php');?>

Почему у меня есть разные session_id на каждой странице сайта?

1 Ответ

0 голосов
/ 09 февраля 2019

Поместите session_start как верхнюю часть вашего файла, перед инициализацией сессии не должно быть никаких выходов, и я не знаю, что входит в require_once __DIR__ .'/../core/Domanda.php';

...