[教學]phpbb session 方式

phpBB Installation & Usage Support
phpBB 2 安裝於各類型作業平台之問題討論;外掛問題,請到相關版面依發問格式發表!
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群

版面規則
本區是討論關於 phpBB 2.0.X 架設安裝上的問題,只要有安裝任何外掛,請到外掛討論相關版面按照公告格式發表。
(發表文章請按照公告格式發表,違者砍文)
主題已鎖定
頭像
dicks
星球公民
星球公民
文章: 40
註冊時間: 2004-08-15 19:04
聯繫:

[教學]phpbb session 方式

文章 dicks »

這篇算是分享~有機會,大家一起來研究^^

其實phpbb內有許多相當好用的function
最近在寫php程式(工作需要) 因而參考phpbb
進而想更進一步了解phpbb的架構

首先便是了解了phpbb的session方式
在phpbb內 將 user的session以 ip md5 編碼方式存入db session 資料表中
並內定60s 刷新一次!
資料內記錄 ip,session_id session time 以及 page_id (訂於 constants.php 內)
大部份的程式 放在 sessions.php 及 一些 session的function 放在 functions.php

而抓取後的資料放在\r
$userdata['session_id'] // session 的 編碼 以 ip md5 編成唯一碼\r
$userdata['session_ip'] // 用戶的ip
$userdata['session_user_id'] // user的id 即 權限 訪客 -1 管理者 1…\r
$userdata['session_logged_id'] // 用戶登入 0/1
$userdata['session_page'] // 用戶觀看 page id 訂在 constants.php 內\r
$userdata['session_start'] // session 啟動 time
$userdata['session_time'] // session 週期
$userdata['user_level'] // 用戶 等級
$userdata['user_password'] // 用戶密碼 (用於自動登入)
$userdata['username'] // 用戶名字
$SID // 公用變數 同 session_id

有了上述,便可輕易更改 觀看page 權限!

其實,還有許多不錯的function
像是 functions.php 內 有個 分頁 函數!
generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE)

只要抓回來用 埴入 url、總頁數、分頁大小、開始頁
就會回傳相對應的url?xxx=xxx…\r
也是不錯的…\r
還有db.php內的各樣的 db function也是不錯\r
丫~~~太多太多了~_~
有機會,再把一些不錯的 片段和大家分享^^"
Flashdes
星球普通子民
星球普通子民
文章: 29
註冊時間: 2004-11-08 11:28

文章 Flashdes »

哇~感謝 dicks 大略講解了一番,之前小弟也很想將自己的網站能夠整合phpbb,想讓使用者不論從phpbb註冊或者是從我自己的網站註冊,系統都能夠自動判斷都是會員而不必再次註冊...不過初次看phpbb的程式似乎不知該如何從哪裡下手,希望有機會 dicks能多多分享更詳盡的文章 ^^
-----------------------------------
●架設主機作業系統:FreeBSD
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:phpBB (2.0.13)
●安裝的外掛 : Nickname + Birthday + Gender + DIY(自行新增欄位)
頭像
dicks
星球公民
星球公民
文章: 40
註冊時間: 2004-08-15 19:04
聯繫:

文章 dicks »

所有session有關的function:
在 include/functions.php 內\r
function encode_ip($dotquad_ip) 用戶 ip編碼
function decode_ip($int_ip) 解碼
init_userprefs($userdata)

在 include/sessions.php 內\r
session_pagestart(...) 以及 session_begin(…)
這個有一點不同,事實上在 sessions_pagestart() 內也會 呼叫 session_begin()
而差在那兒呢?
就同字面上英文一樣\r
當user開啟站內任一個page時
session_pagestart 啟動(檢查session_id、若是新的便劊建 新session_id (根據ip 作編碼)
還有最重要的一點就是每60s清一次sessions內的資料,已過期的session便清掉!以及db無限擴張!
之後呼叫 session_begin()
session 啟動(根據session 週期) 以及 ban ip 擋掉、同時也會update session 的start time
以確認你還在線上(根據session週期,週期一過,你的ie也無任何動作,便清掉你在db的session值)
ps: session 週期預設3600s
同時也作cookie的檢查,以便作自動登入,若你有在登入上打勾的話!而cookie的name、網域 記錄在
$board_config['xxxx'] 內這個變數(陣列) 請記住,亦即所有 system 的後台設定、如風格、語系等等…\r
全記錄在這個變數,當然它的來源取於在 common.php 內抓取 XXx_config 這個資料表囉!
而session_end()這個function 就是session 結束啦,清掉你的session_id 一般啟動在 logout。

而那phpbb如何呼叫並抓取session呢?
在每個page( 即index.php、viewtopic.php、search.php等…) 都會有二行

$userdata = session_pagestart($user_ip, PAGE_INDEX); // 呼叫session ,PAGE_INDEX 代表你正在看那個page
init_userprefs($userdata); // 和抓取 user的自訂語系和風格 放在 function

之後便存在 $userdata['xxx] 囉~~

而通常想判斷 user 權限 便是判斷 $userdata['user_level']
要判斷 if($userdata['user_level']!= USER 便是會員才能 其它如 ANONYMOUS'、ADMIN、MOD 全都定義在 include/constants.php內\r
大致上就是如此…如有所遺漏還請見諒! 看code很累的^^"
問題狂
竹貓忠實會員
竹貓忠實會員
文章: 1947
註冊時間: 2004-06-28 17:13

文章 問題狂 »

呵呵..很好的教學\r
可以造福多人
Flashdes
星球普通子民
星球普通子民
文章: 29
註冊時間: 2004-11-08 11:28

文章 Flashdes »

感恩喔~受益良多..

小弟正想辦法怎麼把從phpbb中註冊完之後的id,pwd,email,這三個值能夠直接\r
再存入我原本已存在的網站會員資料欄位裡,目的是想不要讓會員有兩次註冊的麻煩~~
-----------------------------------
●架設主機作業系統:FreeBSD
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:phpBB (2.0.13)
●安裝的外掛 : Nickname + Birthday + Gender + DIY(自行新增欄位)
Flashdes
星球普通子民
星球普通子民
文章: 29
註冊時間: 2004-11-08 11:28

文章 Flashdes »

哇哇~~

我在註冊完成後所顯示的頁面訊息中 :

"感謝您的註冊, 您的帳號已被建立.您現在可以輸入會員帳號及密碼登入討論區"嘗試加入Dicks大大上述所寫的會員名稱 $userdata['username'] 結果是出現 Anonymous , 請問有什麼方式可以讀取到註冊頁上所填入的姓名欄位呢??
-----------------------------------
●架設主機作業系統:FreeBSD
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:phpBB (2.0.13)
●安裝的外掛 : Nickname + Birthday + Gender + DIY(自行新增欄位)
頭像
dicks
星球公民
星球公民
文章: 40
註冊時間: 2004-08-15 19:04
聯繫:

文章 dicks »

快下班了~~回你一吧!

我想你搞錯 $userdata['username'] 所存的值是什麼意義了!
他代表的是登入後的username了
意思是已有帳號的人登入後,所記錄的值!(是session)
而你所要的是register後所送出的 form 欄位值,有點不一樣,
因為,你的會員 table 和 phpbb 的會員 table 分開!

所以我建議你
1、朝register 去改\r
2、把 你的和 phpbb的user_table 合在一起\r
3、朝login 去改,意思是 login 時,要 開啟 你的user table 和phpbb 的 usertable …\r
我是覺的還是 二比較好, 一來可避免 你的user table 和 phpbb 的user table
內有 值重覆,基本上 user table 內的user name 因為都是 only 你一個不小心
處理不好的話,就會有bug了。
Flashdes
星球普通子民
星球普通子民
文章: 29
註冊時間: 2004-11-08 11:28

文章 Flashdes »

了解了解了~~

小弟的確搞錯了... (真是笨的可以囉!!)
那如果我把我的User_Table 內的欄位加入Phpbb的 User_Table裡,那請問這些多的欄位怎麼在註冊畫面讓會員填寫以及檢視個人資料時能秀出來呢??

目前小弟已經將User_Table 欄位整合在一塊了... 註冊頁面的問題就搞不清楚了.. :(
-----------------------------------
●架設主機作業系統:FreeBSD
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:phpBB (2.0.13)
●安裝的外掛 : Nickname + Birthday + Gender + DIY(自行新增欄位)
頭像
dicks
星球公民
星球公民
文章: 40
註冊時間: 2004-08-15 19:04
聯繫:

文章 dicks »

要改那些~嗯~~~~蠻多的喔
至少要動到以下檔~

viewtopic.php
admin/admin_users.php
includes/usercp_avatar.php
includes/usercp_register.php
includes/usercp_viewprofile.php
language/..../lang_main.php
templates/..../profile_add_body.tpl
templates/..../profile_view_body.tpl
templates/..../subSilver.cfg
templates/..../viewtopic_body.tpl
templates/..../admin/user_edit_body.tpl

事實上你可以參考 別的外掛像需要新增欄位的、生日、性別等…\r
大致上也是在 template 輸出的
'xxx' => $uuuu 這裡動手腳 以及 sql 語法上,
當然在tpl 上也要有相對應的 {yyy} 大致上就是如此~
詳細可能你要自行研究了,因為 需要那些欄位也只有你最清楚了v_v
Flashdes
星球普通子民
星球普通子民
文章: 29
註冊時間: 2004-11-08 11:28

文章 Flashdes »

謝謝~~


我試看看!!有了成果在PO上來!!
-----------------------------------
●架設主機作業系統:FreeBSD
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:phpBB (2.0.13)
●安裝的外掛 : Nickname + Birthday + Gender + DIY(自行新增欄位)
Flashdes
星球普通子民
星球普通子民
文章: 29
註冊時間: 2004-11-08 11:28

[問題] 公司會員網站與Phpbb一次性登入問題??

文章 Flashdes »

果然該面對的還是要面對~~

公司原已有一個會員網站 , 年初架了Pbpbb 2.0.13 , 也將會員網站的資料庫與Phpbb整合為同一個資料庫了(以Phpbb資料庫為主) , 但目前發生一個問題即\r
是...

會員在會員網站登入後,透過連結進入Phpbb某一主題時 , 還得必須重新登入一次 , 反之也一樣 , 我在找到了這篇Dicks大大所提供的Phpbb的 Session資料 , 仍舊沒辦法理解該怎麼著手....

希望曾解決過此問題的大大們能撥空指導一下小弟!!

PS : 感謝Dicks大大這篇文章,多多少少又了解了一些知識~


dicks 寫:所有session有關的function:
在 include/functions.php 內\r
function encode_ip($dotquad_ip) 用戶 ip編碼
function decode_ip($int_ip) 解碼
init_userprefs($userdata)

在 include/sessions.php 內\r
session_pagestart(...) 以及 session_begin(…)
這個有一點不同,事實上在 sessions_pagestart() 內也會 呼叫 session_begin()
而差在那兒呢?
就同字面上英文一樣\r
當user開啟站內任一個page時
session_pagestart 啟動(檢查session_id、若是新的便劊建 新session_id (根據ip 作編碼)
還有最重要的一點就是每60s清一次sessions內的資料,已過期的session便清掉!以及db無限擴張!
之後呼叫 session_begin()
session 啟動(根據session 週期) 以及 ban ip 擋掉、同時也會update session 的start time
以確認你還在線上(根據session週期,週期一過,你的ie也無任何動作,便清掉你在db的session值)
ps: session 週期預設3600s
同時也作cookie的檢查,以便作自動登入,若你有在登入上打勾的話!而cookie的name、網域 記錄在
$board_config['xxxx'] 內這個變數(陣列) 請記住,亦即所有 system 的後台設定、如風格、語系等等…\r
全記錄在這個變數,當然它的來源取於在 common.php 內抓取 XXx_config 這個資料表囉!
而session_end()這個function 就是session 結束啦,清掉你的session_id 一般啟動在 logout。

而那phpbb如何呼叫並抓取session呢?
在每個page( 即index.php、viewtopic.php、search.php等…) 都會有二行

$userdata = session_pagestart($user_ip, PAGE_INDEX); // 呼叫session ,PAGE_INDEX 代表你正在看那個page
init_userprefs($userdata); // 和抓取 user的自訂語系和風格 放在 function

之後便存在 $userdata['xxx] 囉~~

而通常想判斷 user 權限 便是判斷 $userdata['user_level']
要判斷 if($userdata['user_level']!= USER 便是會員才能 其它如 ANONYMOUS'、ADMIN、MOD 全都定義在 include/constants.php內\r
大致上就是如此…如有所遺漏還請見諒! 看code很累的^^"
-----------------------------------
●架設主機作業系統:FreeBSD
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:phpBB (2.0.13)
●安裝的外掛 : Nickname + Birthday + Gender + DIY(自行新增欄位)
頭像
johnkk
星球公民
星球公民
文章: 234
註冊時間: 2003-02-21 19:15
來自: 來自蝸牛鎮
聯繫:

Re: [問題] 公司會員網站與Phpbb一次性登入問題??

文章 johnkk »

Flashdes 寫:果然該面對的還是要面對~~

公司原已有一個會員網站 , 年初架了Pbpbb 2.0.13 , 也將會員網站的資料庫與Phpbb整合為同一個資料庫了(以Phpbb資料庫為主) , 但目前發生一個問題即\r
是...

會員在會員網站登入後,透過連結進入Phpbb某一主題時 , 還得必須重新登入一次 , 反之也一樣 , 我在找到了這篇Dicks大大所提供的Phpbb的 Session資料 , 仍舊沒辦法理解該怎麼著手....

希望曾解決過此問題的大大們能撥空指導一下小弟!!

PS : 感謝Dicks大大這篇文章,多多少少又了解了一些知識~
你的問題 可以在 你說的版面的那頁中加入
$userdata = session_pagestart($user_ip, MINSU_VIEW);
init_userprefs($userdata);

這就是會員登入後讀取每頁時必須 到session 比對會員資料~
對Red Hat Linux還是一位新手..
但決不會因為難而放棄的
越是難搞越有興趣~^.^~

歡迎參觀我的網站
http://www.snailtown.idv.tw/
圖檔

●架設主機作業系統:Linux
●網站連結: http://www.snailtown.idv.tw/
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:2.015
Flashdes
星球普通子民
星球普通子民
文章: 29
註冊時間: 2004-11-08 11:28

Re: [問題] 公司會員網站與Phpbb一次性登入問題??

文章 Flashdes »

johnkk 寫: 你的問題 可以在 你說的版面的那頁中加入
$userdata = session_pagestart($user_ip, MINSU_VIEW);
init_userprefs($userdata);

這就是會員登入後讀取每頁時必須 到session 比對會員資料~

想不到這一PO就生了場大病 , 問題依舊沒能在我住院的這段期間搞定 , 感謝 johnkk 經驗分享 , 按照您說的意思 :

1. 若從會員網站登入成功後回首頁 , 上述兩行Code該寫在登入成功後的頁面??
還是有連結PhpBB主題的頁面??

2. 若從PhpBB 登入成功之後 , 回到會員網站時 , 因為會員網站的頁面也必須檢\r
查是否登入 , 所以也是將上述兩行Code 加到該頁面裡嗎??

3. 那麼我該 Include 的檔案有哪些....??
-----------------------------------
●架設主機作業系統:FreeBSD
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:phpBB (2.0.13)
●安裝的外掛 : Nickname + Birthday + Gender + DIY(自行新增欄位)
炎狼
星球普通子民
星球普通子民
文章: 2
註冊時間: 2005-06-28 12:27

文章 炎狼 »

哇~感謝 dicks 大大詳細的解釋!

我目前已經能夠成功的使用phpBB2 的session ,做出自己想要的function

目前持續設計中 :-)

歡迎參觀我的網站
http://www.expert-lee.com/phpBB2/index.php


架設主機作業系統:Linux
●網站連結: http://www.expert-lee.com/phpBB2/index.php
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:2.015
三呎秋水塵不染,天下無雙!

http://www.expert-lee.com/phpBB2/index.php
cookie805
星球普通子民
星球普通子民
文章: 3
註冊時間: 2006-03-15 16:17

文章 cookie805 »

謝謝!讓我看到一絲希望啊!

但是我還是不知道從何處下手啊,我網站上有購物車的,那怎麼解決呢?能不能講解一下啊!太笨了,不好意思啊!
主題已鎖定

回到「phpBB 2 安裝與使用」