我试图在$ _SESSION数组的键为空的情况下终止会话,然后重定向到破坏会话的脚本并重定向到索引。这是我的文件结构
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{
}
我故意设置$_SESSION = null
来测试代码
search.php
由landing.php
通过AJAX调用
我遇到404错误
如果我使用
header('Location: session_end.php');
服务器响应
未找到请求的URL /backend/apis/profiles/session_end.php为 在此服务器上找不到。
此外,尝试执行404找不到错误 使用ErrorDocument来处理请求。
好像正在搜索个人档案文件夹中的session_end.php
文件,为什么? CoreTools.php
除了session_end.php
之外,还位于核心文件夹中
我也尝试过这种方式
header('Location: http://www.mysite.tv/backend/core/session_end.php');
它返回CORS错误(我现在不想配置CORS)
也是如此
$path = $_SERVER['HTTP_HOST'] . '/backend/core/session_end.php';
header('Location: ' . $path);
这是404错误
未找到请求的URL /backend/apis/profiles/http//www.mysite.tv/backend/core/session_end.php 在此服务器上找不到。
此外,尝试执行404找不到错误 使用ErrorDocument来处理请求。
这是绝望的解决方案
echo '<script>window.location.href="./backend/core/session_end.php"</script>';
它不起作用
我的代码有什么问题?
答案 0 :(得分:4)
相对URL是由客户端而不是服务器处理的。客户端相对于它所加载的URL对其进行解释,该URL位于profiles
文件夹中,因此它将在其中寻找session_end.php
。
重定向AJAX调用没有什么意义,因为AJAX不会在客户端上重新加载页面。
CORS错误可能是由使用https:
进行的原始AJAX调用引起的,但是您将重定向到http:
,这被认为是不同的域。您可以在URL中省略协议和域,它将从原始URL继承它们。
header('Location: /backend/core/session_end.php');