Initial commit: 投注游戏平台初始化

This commit is contained in:
li
2026-02-25 01:26:58 +08:00
commit 77ca2cc8b3
275 changed files with 237479 additions and 0 deletions
+142
View File
@@ -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;
}
}