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没有测试我所做的,并加入了一些东西供您思考,但它应该可以工作。显示您的新代码。