Php 标头位置未采用声明的路径
如果$\u session的数组键为空,我试图杀死一个会话,然后重定向到一个脚本,该脚本破坏会话并重定向到索引。这是我的文件结构Php 标头位置未采用声明的路径,php,Php,如果$\u session的数组键为空,我试图杀死一个会话,然后重定向到一个脚本,该脚本破坏会话并重定向到索引。这是我的文件结构 backend apis profiles search.php core session_end.php CoreTools.php frontend index.php landing.php 这是CoreTools.php代码 class CoreTools{ protected $session; pub
backend
apis
profiles
search.php
core
session_end.php
CoreTools.php
frontend
index.php
landing.php
这是CoreTools.php
代码
class CoreTools{
protected $session;
public function __construct( $inSession ){
$this->session = $inSession;
}
public function sessionLost(){
$return = false;
if( empty( $this->session ) ){
$return = true;
}else{
foreach( $this->session as $s ){
if( empty( $s ) ){$return = true;}
}
}
return $return;
}
public function checkPermissions( $perm ){
if( self::sessionLost() ){
header('Location: session_end.php');
}else{
//too much code
return true;
}
}
}
上面的代码由search.php调用
session_start();
require '../../core/CoreTools.php';
$_SESSION = null;
$tools = new CoreTools( $_SESSION );
if( !$tools->checkPermissions( 'get' ) ){
$response['success'] = false;
$response['message'] = 'Not allowed';
}else{
}
我故意设置$\u SESSION=null
来测试代码
search.php
由landing.php
通过AJAX调用
我有404个错误
如果我使用
header('Location: session_end.php');
服务器响应
找不到请求的URL/backend/api/profiles/session_end.php
在此服务器上找不到
此外,在尝试查找时遇到404 Not Found错误
使用ErrorDocument来处理请求
看起来它正在profiles文件夹中搜索session\u end.php
文件,为什么CoreTools.php
位于核心文件夹中,除了session\u end.php
session_start();
require '../../core/CoreTools.php';
$_SESSION = null;
$tools = new CoreTools( $_SESSION );
if( !$tools->checkPermissions( 'get' ) ){
$response['success'] = false;
$response['message'] = 'Not allowed';
}else{
}
我也这样试过
header('Location: http://www.mysite.tv/backend/core/session_end.php');
$path = $_SERVER['HTTP_HOST'] . '/backend/core/session_end.php';
header('Location: ' . $path);
它返回一个CORS错误(我现在不想配置CORS)
也是这样吗
header('Location: http://www.mysite.tv/backend/core/session_end.php');
$path = $_SERVER['HTTP_HOST'] . '/backend/core/session_end.php';
header('Location: ' . $path);
这是404错误
找不到请求的URL
/backend/api/profiles/http//www.mysite.tv/backend/core/session_end.php
在此服务器上找不到
此外,在尝试查找时遇到404 Not Found错误
使用ErrorDocument来处理请求
这是去散化的解决方案
echo '<script>window.location.href="./backend/core/session_end.php"</script>';
echo'window.location.href=“./backend/core/session_end.php”;
而且它不起作用
我的代码怎么了?相对URL由客户端处理,而不是服务器。客户端相对于加载的URL解释它,URL位于profiles
文件夹中,因此它在那里查找session\u end.php
重定向AJAX调用没有多大意义,因为AJAX不会在客户端重新加载页面
CORS错误可能是由使用https:
的原始AJAX调用引起的,但您正在重定向到http:
,这被认为是另一个域。您可以在URL中省略协议和域,它将从原始URL继承它们
header('Location: /backend/core/session_end.php');
相对URL由客户端而不是服务器处理。客户端相对于加载的URL解释它,URL位于profiles
文件夹中,因此它在那里查找session\u end.php
重定向AJAX调用没有多大意义,因为AJAX不会在客户端重新加载页面
CORS错误可能是由使用https:
的原始AJAX调用引起的,但您正在重定向到http:
,这被认为是另一个域。您可以在URL中省略协议和域,它将从原始URL继承它们
header('Location: /backend/core/session_end.php');
我通常使用小写的l,并在末尾加一个换行符,但是你说的是ajax,所以ajax不会遵循重定向,你需要在javascript@DavidBray大小写在标题名称中不重要,不应添加换行符。不要忘记退出
!看起来当前的URL路径是/backend/api/profile/search.php
,所以如果您想从该路径重定向到session\u end.php
,您可以使用绝对路径/backend/core/session\u end.php
或相对路径。/../core/session\u end.php
@phil,如果我这样做,可能在我使用CoreTools()时
从核心文件夹中,它将不起作用。为什么相对路径不起作用?达曼,我也试过了,它返回了第一个错误。我通常使用小写的l,并在末尾添加换行符,但是你说的是ajax,所以ajax不会遵循重定向,你需要在javascript@DavidBray大小写在标题名称中不重要,不应添加换行符。不要忘记退出!看起来当前的URL路径是/backend/api/profile/search.php
,所以如果您想从该路径重定向到session\u end.php
,您可以使用绝对路径/backend/core/session\u end.php
或相对路径。/../core/session\u end.php
@phil,如果我这样做,可能在我使用CoreTools()时
从核心文件夹中,它将不起作用。为什么相对路径不起作用?达曼,我也试过了,它返回了第一个错误。