Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如何不在登录页面上启动会话_Php_Session - Fatal编程技术网

PHP-如何不在登录页面上启动会话

PHP-如何不在登录页面上启动会话,php,session,Php,Session,我在网站的所有页面上使用相同的标题,如下所示: require_once $_SERVER['DOCUMENT_ROOT'].'/header.php'; 问题是,我还将其用于我的网站的登录页面,一旦用户访问它,就会启动一个会话 login.php <?php $test = 'login'; require_once $_SERVER['DOCUMENT_ROOT'].'/header.php'; ... <?php session_start (); ?> <

我在网站的所有页面上使用相同的标题,如下所示:

require_once $_SERVER['DOCUMENT_ROOT'].'/header.php';
问题是,我还将其用于我的网站的登录页面,一旦用户访问它,就会启动一个会话

login.php

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

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

...
为了避免这种情况,我尝试修改header.php文件,如下所示:

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

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

<!DOCTYPE html>
<html lang="fr" class="no-js">
<head>
<?php
if ($_SESSION['test'] !== 'login') {
  session_start();
  $_SESSION['test'] = 'login';
}
...
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/header.php';
var_dump($_SESSION['test']);
?>
...
<?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';
}
<?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
...

但是它不起作用,而
var_dump
在登录页面上返回我
login
(当我从
header.php
文件中删除
session_start();
时,它工作得很好)


您是否有解决方案?

正如其中一条评论所说,您似乎缺少了这里的基本原理,因为您正在初始化会话,但实际上没有使用它

为变量赋值与向会话功能注册变量不同,请参阅

基于此,您可能会有以下情况:

header.php

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

<!DOCTYPE html>
<html lang="fr" class="no-js">
<head>
<?php
if ($_SESSION['test'] !== 'login') {
  session_start();
  $_SESSION['test'] = 'login';
}
...
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/header.php';
var_dump($_SESSION['test']);
?>
...
<?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';
}
<?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
...

...

我会考虑修改您的体系结构,因为您不需要检查会话是否已经初始化。p> 而且,一般来说,从你的头上这样做没有多大意义,这可能会在将来给你带来问题

我认为你的每一页的格式都应该更像:

init.php

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

<!DOCTYPE html>
<html lang="fr" class="no-js">
<head>
<?php
if ($_SESSION['test'] !== 'login') {
  session_start();
  $_SESSION['test'] = 'login';
}
...
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/header.php';
var_dump($_SESSION['test']);
?>
...
<?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';
}
<?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
...

在登录页面上启动会话有什么问题?这就是您应该启动会话的地方。我想在登录表单中启动会话,而不是在登录页面上启动会话。我不确定您是否熟悉PHP会话的基础,但您的“不受欢迎”行为并不是不受欢迎的
session\u start
不会在每次页面加载时创建新会话(如果用户的第一个页面视图是登录页面,则不会执行任何操作)。所发生的一切就是将执行cookie检查,并且任何以前的会话数据都将保持不变(或者将设置一个新的会话cookie)。除非有令人信服的技术原因,否则这实际上是一个很好的做法,完全按照您的方式进行。如果您需要更多地控制何时启动会话,请不要将HTML标头与会话启动业务逻辑混为一谈。把它们放在不同的文件中,只在必要时包含每一个。谢谢你,但这并不能回答我的问题,我只是不想在登录页面上创建一个会话,而不必删除我网站所有页面的标题。它不起作用,我在登录页面上出现了这个错误:
注意:未定义变量:\u SESSION
@Rocstar没有测试我所做的,并加入了一些东西供您思考,但它应该可以工作。显示您的新代码。