首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 網頁遊戲 Xnova (OGame) 原始碼解析(四):用戶登入 login.php 流程詳解

     編輯:PHP 綜合知識

login.php 入口常數

<?php
define('INSIDE', true);   // 防止直接存取核心檔案
define('INSTALL', false); // 非安裝模式
define('LOGIN', true);    // 登入頁面標識
$InLogin = true;          // 模板判斷用

載入核心與語言包

<?php
$xnova_root_path = './';
include($xnova_root_path . 'extension.inc');
include($xnova_root_path . 'common.' . $phpEx);
includeLang('login'); // 載入 login.mo

首次訪問:顯示歡迎頁

<?php
$parse = $lang;
$Count = doquery('SELECT COUNT(*) as players FROM {{table}} WHERE 1', 'users', true);
$LastPlayer = doquery('SELECT username FROM {{table}} ORDER BY register_time DESC', 'users', true);
$PlayersOnline = doquery("SELECT COUNT(DISTINCT id) as onlinenow FROM {{table}} WHERE onlinetime > " . (time()-900), 'users', true);

$parse['last_user'] = $LastPlayer['username'];
$parse['online_users'] = $PlayersOnline['onlinenow'];
$parse['users_amount'] = $Count['players'];
$parse['servername'] = $game_config['game_name'];
$parse['forum_url'] = $game_config['forum_url'];

$page = parsetemplate(gettemplate('login_body'), $parse);

// API 模式:僅回傳線上/總人數
if ($_GET['ucount'] == 1) {
    die($PlayersOnline['onlinenow'] . "/" . $Count['players']);
} else {
    display($page, $lang['Login']);
}

登入驗證流程

  1. 根據輸入用戶名查詢 users 表
  2. 存在則用 md5() 驗證密碼
  3. 密碼正確 → 檢查「記住我」選項
  4. 載入資料庫配置 config
  5. setcookie() 寫入用戶名、密碼雜湊
  6. header('Location: frames.php') 重導向遊戲主介面

錯誤處理

  • 用戶不存在 / 密碼錯誤 / 帳號被禁 → message() 顯示錯誤並終止
  • message() 功能類似 display() 但用於錯誤/資訊頁面
  • 安全性現代視角審視

    原版做法風險現代建議
    md5() 單向雜湊極易碰撞、彩虹表破解password_hash() + password_verify() (bcrypt/argon2)
    Cookie 存密碼雜湊竊取即可偽造登入Session + HttpOnly Cookie / JWT / Remember Token
    無 CSRF 保護跨站請求偽造表單 Token / SameSite Cookie
    md5 無鹽值相同密碼產生相同雜湊bcrypt 內建鹽值、成本因子可調

    遷移建議

    若維護 Xnova 類專案,優先重構認證系統:

    1. 資料庫新增 password 欄位存 bcrypt 雜湊
    2. 登入改用 password_verify()
    3. 引入 session_regenerate_id(true) 防 Session Fixation
    4. 實作 Remember Me:資料庫存 selector/validator、Cookie 存雙 Token
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved