php - 为什么我在网站的每个页面上都有不同的 session_id?
问题描述
我创建了一个 php (MVC) 网站版本 5.6.30。我在 index.php 中添加了 session_start(),但是每次我更改页面时都会更改 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 文件,它确定使用哪个方法并使用post 模型执行各种调用
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;
}
函数.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?
解决方案
将 session_start 作为文件的顶部,在会话初始化之前应该没有输出,我不知道其中包含什么require_once __DIR__ .'/../core/Domanda.php';
推荐阅读
- kalman-filter - 卡尔曼滤波器中的 dt
- javascript - 我可以安全地使用 javascript 中的 Number 类型进行 2 位小数的计算吗?
- sql - 无法在 SQL Azure 中运行更新查询 *无效的对象名称“DataSync.provision_marker_dss”。*
- java - Java 任务控制在尝试分析正在运行的应用程序的堆转储时出错 - java.lang.Integer 无法转换为 com.'sometxt'.JavaHeapObject
- python-3.x - Pandas 向量化条件优化
- unit-testing - 为什么 Pytest 会为每个测试方法创建一个新的类实例?
- sql - 避免在 select 子句中进行硬编码
- php - 如何突出显示使用 PHP 从 MySQL 数据库中获取的 Jquery datepicker 日期?
- python - 将多个数据框合并为一个,每个数据框作为标题名称,其中包含许多列并创建一个 3D 数据框
- raspberry-pi - 使用 ACR122U 的 libnfc 或 nfcpy 问题