PHP - Как не начать сеанс на странице входа - PullRequest
0 голосов
/ 05 марта 2019

Я использую один и тот же заголовок на всех страницах моего сайта, например так:

require_once $_SERVER['DOCUMENT_ROOT'].'/header.php';

Проблема в том, что я также использую его для страницы входа на свой сайт, и сеанс запускается, как толькопользователь обращается к нему

login.php

<?php
$test = 'login';
require_once $_SERVER['DOCUMENT_ROOT'].'/header.php';
...

header.php

<?php
session_start (); 
?>

<!DOCTYPE html>
<html lang="fr" class="no-js">
<head>
...

Я бы хотел избежатьЯ попытался изменить мой файл header.php следующим образом:

header.php

<?php
var_dump($test);
if ($test !== 'login') {
  session_start (); 
}
?>

<!DOCTYPE html>
<html lang="fr" class="no-js">
<head>

Но он не работает, а var_dump возвращаетme login на странице входа (хорошо работает, когда я удаляю session_start (); из файла header.php)

У вас есть решение?

1 Ответ

1 голос
/ 05 марта 2019

Как было сказано в одном из комментариев, похоже, что вы упускаете основные принципы здесь, потому что вы инициализируете сеанс, но фактически не используете его.

Назначение значения переменной не то же самое, что регистрация его с помощью функции сеанса, см. пример базового использования .

Исходя из этого, у вас может быть что-то вроде:

header.php

<?php
if ($_SESSION['test'] !== 'login') {
  session_start();
  $_SESSION['test'] = 'login';
}
...

login.php

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/header.php';
var_dump($_SESSION['test']);
?>
...

Я бы подумал о пересмотре вашей архитектуры, потому что вам не нужно проверять, инициализирован ли уже сеанс, когда вызывает session_start () .

Кроме того, в целом выполнение этого из заголовка не имеет особого смысла, что, вероятно, приведет к возникновению проблем в будущем.

Я думаю, что каждая из ваших страниц должна быть отформатирована так:

init.php

<?php
/*  CONFIG FOR APPLICATION
-------------------------- */

// Could potentially define some runtime configuration
if ($_SERVER['HTTP_HOST'] == 'proddomain.tld') {
  define('ENVIRONMENT', 'production');
}
else if ($_SERVER['HTTP_HOST'] == 'localhost') {
  define('ENVIRONMENT', 'development');
}
else {
  echo 'Unknown runtime environment!';
  exit;
}

// Create or resume the session
session_start();

// Testing out session functionality
$_SESSION['test'] = 'hello world';

// Could include some session handling for expiration, etc

// Could include a routing solution

// But fine depending on the page you want to show the header
// So you can make some condition that matches this,
// like check the url to see if it is login.php and if not then include the header
if ($myMagicCondition) {
  require_once $_SERVER['DOCUMENT_ROOT'].'/navigation.php';
}

anypage.php

<?php
// Include the application configuration
require_once $_SERVER['DOCUMENT_ROOT'].'/init.php';
// Testing runtime constants
var_dump(ENVIRONMENT);
// Testing registered session variable
var_dump($_SESSION['test']);
// The rest of your page
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...