Initial commit: 投注游戏平台初始化
This commit is contained in:
Executable
+142
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
namespace App\Core;
|
||||
|
||||
class WebBaseController extends BaseController {
|
||||
|
||||
protected function render($viewPath, $data = []) {
|
||||
// 如果是绝对路径,直接使用
|
||||
if (strpos($viewPath, '/') === 0 || preg_match('/^[a-zA-Z]:\\\\/', $viewPath)) {
|
||||
$fullPath = $viewPath;
|
||||
} else {
|
||||
// 相对路径,按默认视图目录拼接
|
||||
$viewsDir = __DIR__ . '/../views/';
|
||||
$fullPath = $viewsDir . $viewPath;
|
||||
}
|
||||
|
||||
if (!file_exists($fullPath)) {
|
||||
throw new Exception("视图文件不存在: $fullPath");
|
||||
}
|
||||
|
||||
extract($data);
|
||||
|
||||
if (
|
||||
!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
|
||||
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'
|
||||
) {
|
||||
include $fullPath;
|
||||
} else {
|
||||
ob_start();
|
||||
include $fullPath;
|
||||
$Content = ob_get_clean();
|
||||
|
||||
include __DIR__ . '/../views/Web/index.php'; // 主后台模板
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查前台用户登录状态
|
||||
* 如果未登录,重定向到登录页面
|
||||
*/
|
||||
protected function checkWebLogin() {
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
$timeout = isset($_SESSION['web_remember']) && $_SESSION['web_remember'] ? 604800 : 7200; // 记住我:7天,否则2小时
|
||||
|
||||
// 检查是否有用户ID
|
||||
if (!isset($_SESSION['web_user_id'])) {
|
||||
$this->redirectToLogin();
|
||||
return;
|
||||
}
|
||||
|
||||
// 提取 IP 前三段(IPv4)
|
||||
function get_ip_prefix($ip, $segments = 3) {
|
||||
if (empty($ip)) return '';
|
||||
$parts = explode('.', $ip);
|
||||
if (count($parts) < 4) return $ip; // IPv6 或其他格式,直接返回
|
||||
return implode('.', array_slice($parts, 0, $segments));
|
||||
}
|
||||
|
||||
// 宽松 IP 检查(只比对前三段,例如 192.168.1.xxx)
|
||||
$currentIp = $_SERVER['REMOTE_ADDR'] ?? '';
|
||||
$sessionIp = $_SESSION['web_ip'] ?? '';
|
||||
|
||||
if (!empty($currentIp) && !empty($sessionIp)) {
|
||||
$current_ip_prefix = get_ip_prefix($currentIp, 3);
|
||||
$session_ip_prefix = get_ip_prefix($sessionIp, 3);
|
||||
|
||||
if ($current_ip_prefix !== $session_ip_prefix) {
|
||||
session_destroy();
|
||||
$this->redirectToLogin();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// User Agent 检查
|
||||
$currentUa = $_SERVER['HTTP_USER_AGENT'] ?? '';
|
||||
$sessionUa = $_SESSION['web_ua'] ?? '';
|
||||
|
||||
if (!empty($currentUa) && !empty($sessionUa) && $currentUa !== $sessionUa) {
|
||||
session_destroy();
|
||||
$this->redirectToLogin();
|
||||
return;
|
||||
}
|
||||
|
||||
// 会话超时检查
|
||||
$lastActivity = $_SESSION['web_last_activity'] ?? 0;
|
||||
if (time() - $lastActivity > $timeout) {
|
||||
session_destroy();
|
||||
$this->redirectToLogin();
|
||||
return;
|
||||
}
|
||||
|
||||
// 更新最后活动时间
|
||||
$_SESSION['web_last_activity'] = time();
|
||||
}
|
||||
|
||||
/**
|
||||
* 重定向到登录页面
|
||||
*/
|
||||
private function redirectToLogin() {
|
||||
$currentUrl = $_SERVER['REQUEST_URI'] ?? '/';
|
||||
$loginUrl = '/login?redirect=' . urlencode($currentUrl);
|
||||
|
||||
if (
|
||||
!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
|
||||
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'
|
||||
) {
|
||||
// AJAX 请求,返回 JSON
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode([
|
||||
'success' => false,
|
||||
'redirect' => $loginUrl,
|
||||
'message' => 'Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại!'
|
||||
]);
|
||||
} else {
|
||||
// 普通请求,重定向
|
||||
header('Location: ' . $loginUrl);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前登录用户ID
|
||||
*/
|
||||
protected function getCurrentUserId() {
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
return $_SESSION['web_user_id'] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前登录用户名
|
||||
*/
|
||||
protected function getCurrentUsername() {
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
return $_SESSION['web_username'] ?? null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user