我对会话非常不安全。我正在建立一个用户可以登录的网站。无论您是否登录,我的所有页面都会调用header.html。所以在我的index.php
上,每个人都可以看到我有以下代码:
**index.php**
<?php
if( !isset( $_SESSION['username'])) include('resources/auth/login.php');
else exit( header('Location: home.php') );
if( !isset( $_SESSION ) ) session_start();
if( isset( $_GET['todo'] ) && $_GET['todo'] == 'logout'){
session_unset();
session_destroy();
//echo 'You have been logged out!';
}
?>
<?php include 'resources/includes/header.html';?>
<!-- A lot of code -->
<?php include 'resources/includes/footer.html';?>
会话代码出现在我的标题之前,我被重定向到home.php
。我应该在我的标题中包含该会话代码吗?
home.php
<?php
if( !isset( $_SESSION ) ) session_start();
?>
<?php include 'resources/includes/header.html';?>
<!-- A lot of code -->
<?php include 'resources/includes/footer.html';?>
所以我今天早些时候才想到,我实际上是在我的身体中包含一个会话?因为在我的header.html中,我没有任何关于会话的内容。那么我应该在header.html中进行会话吗?如果我能以最聪明的方式做到这一点?
答案 0 :(得分:1)
在您尝试访问任何session_start()
变量之前,必须始终运行$_SESSION
。
因此,最安全的编码方式是始终在脚本中的第一个<?php
之后添加它。
<强>的index.php 强>
<?php
session_start();
if( !isset( $_SESSION['username'])) include('resources/auth/login.php');
并且
<?php
session_start();
if( !isset( $_SESSION ) )
include 'resources/includes/header.html';
include 'resources/includes/footer.html';
?>