環境:
- CodeIgniter 2.1.2
- Discuz X2.5 (2012年4月7日繁體中文UTF8)
目錄:
- CodeIgniter 在 /
- Discuz 在 /bbs/ (程式碼會因路徑而稍微有所不同)
這次是我第一次使用 Discuz 也是第一次使用 CI。主要網站應用程式用 CI 寫,另外架了個 Discuz 作論壇以及網站會員管理。所以我必須要能夠在 CI 程式中,取得用戶從 Discuz 登入後的用戶資訊 (當前用戶名、uid等)。
試過了 UCenter 來取得資訊,行不通 (一定是我太蠢了),而且網路上都找不到良好的解決方案。
要透過 UCenter 來取得用戶資訊,必須先取得用戶名或其uid,但我就是卡在無法從 cookie 上解密 Discuz 的用戶名出來;網上找了一下,應該是 Discuz 的加密方法不一樣,爬了一些 Disucz 核心,還是找不到好的方法,只好以最少的核心改動來兼容 CI。
改動檔案
本改動未經測試過安全性、性能等指標。僅供參考。
打開
\www\bbs\source\class\discuz\discuz_application.php
找到
class discuz_application extends discuz_base{
在之後加入
var $is_in_bbs = true;
找到
public function __construct() {
在之後加入
if ( ! strpos($_SERVER['REQUEST_URI'], 'bbs') ) $this->is_in_bbs = false;
找到
$this->_init_env();
$this->_init_config();
$this->_init_input();
$this->_init_output();
取代為
$this->_init_env();
$this->_init_config();
$this->_init_input();
if ($this->is_in_bbs) $this->_init_output();
找到
define('IS_ROBOT', checkrobot());
foreach ($GLOBALS as $key => $value) {
if (!isset($this->superglobal[$key])) {
$GLOBALS[$key] = null; unset($GLOBALS[$key]);
}
}
取代為
define('IS_ROBOT', checkrobot());
if ($this->is_in_bbs) {
foreach ($GLOBALS as $key => $value) {
if (!isset($this->superglobal[$key])) {
$GLOBALS[$key] = null; unset($GLOBALS[$key]);
}
}
}
沒有留言:
張貼留言