給自己看的!^^超實用的!!^^

【軟體名稱】:Power Point 全新背景100副
【軟體類別】:其他工具
【檔案格式】:RAR
【檔案大小】:5.37 MB(壓縮前) -> 7.05 MB(壓縮後)
【解壓密碼】:流氓老師(前mengyahoo)
【上傳時間】:2007/03/29
【放置空間】:BADONGO
【分享期限】:直到掛點為止

【軟體介紹】:

您是否覺得Poer Point內建的背景太少了?那一定要試試這些新背景,
讓你在做報告時讓教授老闆有耳目一新的感覺!!

使用方式十分簡單,在「格式」→「投影片設計」→「瀏覽」,
點選欲加入的新背景,馬上就有一百個全新背景供你選擇囉。


【圖片預覽】:

Click here to open new window<br /> CTRL+Mouse wheel to zoom in/out

Click here to open new window<br /> CTRL+Mouse wheel to zoom in/out

Click here to open new window<br /> CTRL+Mouse wheel to zoom in/out

Click here to open new window<br /> CTRL+Mouse wheel to zoom in/out

【全新背景共100副】:








【檔案下載】:http://www.badongo.com/file/2599253

分享來源:微風的流氓老師 分享!

jianmin2 發表在 痞客邦 留言(0) 人氣()

據銀河證券首席基金分析師胡立峰稱,中國股指期
貨有望在未來3個月推出。在26只大盤封閉式基金31.04
%高折價背景下(截至4月30日),大盤封閉式基金是股
指期貨較佳的對沖交易工具。大量的套利買盤和對沖交
易買盤將推動封閉式基金價格向淨值靠攏。  

    他表示,未來3個月內,預期封閉式基金基改會逐步
取得共識。現有的26只大盤封閉式基金的出路問題在未
來3個月內會取得共識,要麼提前轉為開放式基金,要麼
改造為創新型封閉式基金,保留現狀的可能性不大。

    據在未來3個月之內,股指期貨和基改兩大因素中的
任一因素都可以推動封閉式基金價格上漲30%,而如果
是兩大因素合力推動的話,只要大盤穩住3800點,則封
閉式基金上漲30%基本可以確定。屆時大規模分紅再錦
上添花,則可以獲取穩定可靠的利潤。

    他重點推薦基金普豐,淨值中50%的資產盯住滬深
300指數,是基金研究中心今年2月份定義的股指期貨對
沖交易第一號工具。其他關注品種為:基金景福、基金
景宏、基金豐和、基金興華、基金天華。


來源:微風savvy 分享

jianmin2 發表在 痞客邦 留言(0) 人氣()

記者李金鎗/金城報導

    金城鎮公所舉辦的「浯島城隍文化觀光祭|傳統踩街表演活動」,昨晚原安排醒獅隊、歌仔戲、化妝遊行、神轎等傳統民俗技藝表演,因受到雷雨交加天候影響,鎮公所臨時喊停,將原排定十八日傳統踩街表演活動延期,日期延於五月廿七日舉行,另表訂於今(十九)日晚間所排定的活動則照常舉辦,蔡輝詩歡迎鄉親逗陣來觀賞民俗表演活動,藉此提供夜遊城區的觀光旅客一個觀看表演的去處,並以參與式的活動體驗地區的各種不同習俗和傳統文化,促進金門觀光。  

    鎮公所指出今(十九)日推出的「2007年浯島城隍文化觀光祭|傳統踩街表演」活動,首先為傳統民俗踩街遊行,並定於晚間七時三十分展開踩街遊行活動,遊行由外武廟|民權路榕樹下段|莒光路六桂堂|中興路中段|北鎮廟|金城車站|商會|模範街|貞節牌坊|莒光路1段|總兵署|莒光路|中興路南段|光前路|「城隍廟(簡單表演)」|光前路|回到終點外武廟廣場。  

    晚上表演節目安排由柏村國小太極功夫扇、南門境鄭元和打花草表演、北門絲竹樂隊表演、請神輦(輦轎)鑼鼓等演出。蔡輝詩期望藉由配合浯島城隍文化觀光祭|傳統踩街表演活動,結合一連串的活動促進金門觀光,讓大家更了解金門農曆四月十二日迎城隍民俗慶典活動的意義。


來源:金門日報

jianmin2 發表在 痞客邦 留言(0) 人氣()

雖然是自由軟體但是有 Partition Magic 水準

官網
http://partedmagic.com/



The mighty GParted displaying some partitions:



Parted Magic also includes programs like Partition Image and TestDisk:



GTK+ applications like Thunar, Terminal, and Leafpad are also included:




Parted Magic 1.6 下載
http://partedmagic.com/downloads.html

每當使用者新買一顆硬碟或是想加裝新的作業系統於同一顆硬碟時,就會遇到硬碟分割的問題,市面上有幾套不錯的硬碟分割管理軟體,但售價不斐,而自由軟體中有一套足以媲美的這些軟體的工具程式 Parted Magic。不同以往的硬碟分割工具,Parted Magic 擁有一個非常友善的圖形化操作介面,讓使用者跟著圖示,逐步的完成所有工作。


Parted Magic 的檔案大小只要 30 MB,可以使用 Live CD 或 USB 方式開機後執行程式,軟體中包含圖形化介面,磁碟分割工具,備份及還原工具等等,使用者可以利用它建立、調整大小、重新分配、合併或是拷貝分割磁區,而它支援硬碟格式非常廣泛,無論是 Windows 或 Linux 所用的格式,皆有支援,如ext2、ext3、ext4、linux-swap、fat16、fat32、hfs、ntfs 等等。
來源:| EcStartyucc 分享的

jianmin2 發表在 痞客邦 留言(0) 人氣()

 

基礎操作

 


編輯模板

備份與訂閱部落格

MySQL資料庫管理

其他平台

部落格寵物: 小水滴

來源: http://totem.totematncu.net/post/1/1902
 

e-Totem 大大整理的!

jianmin2 發表在 痞客邦 留言(0) 人氣()

  這篇是給自己看的!wordpess的外掛

1.Akismet

透過wordpress API Key的防垃圾外掛

2.Anarchy Media Player

撥放各種多媒體檔案與影片(包括youtube,google video),另外支援mp3, flv, mov, mp4, m4v, m4a, m4b, 3gp, avi, asf and wmv ,並且自動在編輯器內加入按鈕。

3.Breadcrumb Navigation XT

讓訪客顯示目前所在網站位置的外掛,就像我目前單篇文章的左上角可以看到的功能。

4.Brian’s Latest Comments

顯示訪客的留言以及順序,並且用顏色的方式區分留言時間的遠近,在我首頁的comments可以看到。

5.Comment Karma

替文章的留言加入評分的機制(類似推、埋功能),在我文章的留言處可以看到位置。

6.Extended Live Archives

用ajax顯示站內文章並支援日期、分類、標籤等顯示方式,如同我站內的archives頁面,我也蠻喜歡像是CDC Clean Archives這樣的顯示,不過目前還沒打算更換。

7.Feedburner Feed Replacement

將訂閱你站內其他feed的讀者,全部導向你的feedburner燒的feed,不管他們定的是哪一種feed,顯示起來都只有一種:P

8.flickrRSS

顯示你flickr上面的照片,除了設定各種大小外,還可以自訂顯示的張數、tag還有分隔的標籤,另外還有cache功能。

9.Footnotes

讓你簡單在文章用雙括號插入註解,並且自動在文末條例示展示你的註解,參考效果

10.Gravatars2

留言處顯示站內的大頭貼外掛,當然你對mybloglog的服務情有獨鍾的話,可以參考MBLA或是MyAvatars這兩種。

11.ImageManager

比原本wordpress內建的上傳功能更好用的圖片上傳外掛,可以分目錄、方便編輯語法、還有lightbox的語法也有提供,也支援了所見即所得編輯器。

12.Link Indication

偵測站內連結種類,並且加上自訂的圖示,如果你看到我在站內引用黑米wiki或者是外部連結,後面有另外的圖示,都是這樣子來的。

13.LMB^Box Comment Quicktags

讓訪客再留言時,也有quicktag可以用,就像我目前站內的留言區塊一樣。

14.Random Posts for Chinese

隨機展示站內文章的方式,我在單篇文章用pandom post的區塊來顯示。

15.random text

Beata大人的外掛,隨機顯示格言…whatever,套exdeath的話,我目前是放在首頁拿來顯示我的三八名言

16.Share This

提供了分享到各種網路書籤以及email給朋友的功能,我把它放在單篇文章的article detail裡面。

17.Sideblog Wordpress Plugin

如果你有些無關緊要的資訊,類似twitter之類的嘰嘰渣渣,可以用這個外掛顯示,他除了可以自訂顯示的數量、格式、還可以控制要不要在你的 feed裡面顯示出來(我設定不顯示),比較起twitter來說,也許少了社群的互動,但是不會跟你的站上格格blue,你可以打上三言兩語,也可以插入圖片、影片,訪客也可以當作文章般的回覆,這是我喜歡他的原因。

18.SparkStats

以你設定的日期格式來顯示站內留言數量,就像我首頁右下角的圖示,不管看的懂得人多不多,反正他看起來很炫,新版的已經可以設定自訂背景顏色,為了黑色版面,我將長條圖底下的說明圖也弄了個黑色版本出來。

19.Subscribe To Comments

讓訪客訂閱你文章的回應,這是我想在別人網誌上加上的功能,自己還是先做了。

20.Ultimate Tag Warrior

大名鼎鼎的標籤戰士,站內的標籤都是用這個外掛做的,另外他也可以跟上面介紹的extend live archive配合,讓訪客可以用tag瀏覽的方式展示文章。

21.WP-chgFontSize

讓讀者自訂文章字體的大小,並且將讀者的設定字型大小記在他的瀏覽器的cookie裡面,此外,你可以顯示用顯示字體還是圖示的方式來告知讀者調整字型。

22.WP-Guestbook-Paged (en)

站內留言版的功能就是用它做的,為什麼要用外掛,因為我對留言版跟一般文章的留言有個特殊需求,就是留言版排序由新到舊排序,同時必須分頁,而文章留言由舊到新,並且不能分頁,以保持閱讀的一氣呵成,如果沒有向我依樣的需求,其實你可以用paged-commet這個外掛。

23.WP-ImgCode mod

圖片防垃圾機制,我採用的是C.H.Weng兄的修改版本以免把trackback,pingback檔光光,與akimet並用,是本站唯二的防垃圾外掛,殘暴中帶著溫柔,錯殺機率低。

24.WP-PostViews

顯示文章點閱次數的外掛,內建多種顯示方式,除了像我在單篇文章的article detail裡面的點閱次數外,我在首頁還用它列出了本站熱門十大,有興趣的話,他還有其他方式,請自行研讀作者的教學檔。

25.WP-UserOnline

顯示站內目前人數的外掛,我放在本站底部。

26.WP Grins

方便在文章以及留言中插入表情的外掛,功能就不多說了

來源: http://www.robbin.cc/archives/2007_03_24/597

jianmin2 發表在 痞客邦 留言(2) 人氣()

 

wordpress 要加裝外掛其實簡單到不行, 只有以下幾個步驟而已:1. 至網路上搜尋外掛程式下載(大部分需要解壓縮)並存放至您 blog 資料夾內的 \wp-content\plugins 資料夾下。我想 wordpress 的官方網站是一個絕佳的外掛搜尋地點。

2. 登入您的 blog 主控台, 並在外掛(plugin)頁面內啟動剛剛所下載的外掛。

大致上只要以上兩步就可以了, 但有些外掛則需要再至您的網頁模板修改程式碼才會有效果出來; 相反的, 如果您不想再用這個外掛了, 則只需要在主控台內的外掛(plugin)頁面內, 選擇停止就可以了, 而更徹底的方式是直接將您的外掛程式由 \wp-content\plugins 這個資料夾內刪除, 當然, 如果您在加裝外掛時有修改過您的網頁模板的話, 也要記得去將模板內有關外掛的內容改回來, 不然的話, 在進入您的 blog 時可能會出現錯誤喔!

在介紹蠻牛天空所用的外掛時, 先來介紹兩個外掛吧!

名稱: Exec-PHP
版本: 2.0
作者: Sören Weber
說明: 這個外掛可以讓你在 blog 的文章或網頁裡執行 php 的程式碼喔! 不過預設只有 Administrator 才有權限在所寫的文章或網頁裡執行 php 程式碼.

名稱: Viper’s Plugins Used
版本: 1.12
作者: Viper007Bond
說明: 這個外掛可以將你的 blog 裡所用的所有外掛給列出來, 啟用這個外掛之後, 可以發現在管理頁面的選項(options)頁多一個 Plugins Used 的設定項目, 點選之後, 便可以修改各個外掛的說明. 而你所修改過後的外掛說明, 經過實驗證明, 在將 mysql 裡的 blog 的資料庫資料匯出備份之後, 也會一起備份下來.

要使用這個外掛也很簡單, 我的做法是, 在要列出 blog 所用的外掛的網頁或文章裡加入以下 php 程式碼就可以了, 當然前提是必需啟動前面兩個外掛才可以:

$viperspluginsused = new viperspluginsused();
$viperspluginsused->output_table();

要注意的是在上面兩行程式碼的前後要記得加上 php 程式的標籤喔! 就是 < ?php 跟 ?> 啦, 不然程式是不會執行的喔; 而程式第一行是載入 Viper’s Plugins Used 程式, 第二行才是以表格輸出 blog 所使用的外掛; 可以把表格的標籤當成參數, 然後傳給在第二行的 output_table(), 例如可以將第二行修改成:

$viperspluginsused->output_table(’width=”100%” border=”1″ cellpadding=”3″ cellspacing=”3″‘);

當然, 也可以選擇加入用的到的參數就好了, 不用加那麼多, 而表格也可以用 css 樣式表來設定要顯示的方式, 關於表格如何用 css 樣式表來設定顯示方式, 請至作者的網頁看看吧! 現在來看看蠻牛天空有用到那些外掛吧:

< ?php
$viperspluginsused = new viperspluginsused();
$viperspluginsused->output_table(’width=”90%” border=”1″ cellpadding=”3″ cellspacing=”0″‘);
?>

資料來源:  蠻牛天空

jianmin2 發表在 痞客邦 留言(0) 人氣()

 

請依照下面的步驟,將 Top Read Post、Top Comment Post、Top Karma Posts 與 Top Comment Visitors 的功能增加到你的 pLog 上面:

 

  1. 下載 Mark 精心調製的 Top Read Posts

Top Comment PostsTop Karma PostsTop Comment Visitors

  1. 將檔案解壓縮後上傳到 /your-blog/plugins 的目錄下
  2. 到設定>>外掛程式中心,看看 topreadposts,topcommentposts ,topkarmaposts 與 Topcommentvisitors 是否安裝成功
  3. 修改你的模版

 

以 Mark's Place 為例子,是採用 grey 這個模版,所以必須修改 /your-blog/templates/grey 中的 footer.template 這模版。起將下面程式自行安排在適當位置。更詳細的使用方式,請自行參考 plugin 內部的說明。

 

    <div class="Sidetitle">
<h4>排行榜</h4>
</div>
<p>
<strong>最多人閱讀的文章:</strong><br />
{assign var=posts value=$topreadposts->getTopReadPosts()}
{foreach from=$posts item=post}
<li class="post-bullet"><a title="{$post->getText()|truncate:150:"..."|escape}"
href="{$url->postLink($post)}">{$post->getTopic()}</a> ({$post->getNumReads()} 次)</li>
{/foreach}
</p>
<p>
<strong>最多人評論的文章:</strong><br />
{assign var=posts value=$topcommentposts->getTopCommentPosts()}
{foreach from=$posts item=post}
{assign var=postid value=$post->getId()}
<li class="post-bullet"><a title="{$post->getText()|truncate:150:"..."|escape}"
href="{$url->postLink($post)}">{$post->getTopic()}</a>
({$topcommentposts->getArticleCommentCount($postid)} 篇)</li>
{/foreach}
</p>
<p>
<strong>最多人評分的文章:</strong><br />
{assign var=posts value=$topkarmaposts->getTopKarmaPosts()}
{foreach from=$posts item=post}
{assign var=postid value=$post->getId()}
<li class="post-bullet"><a title="{$post->getText()|truncate:150:"..."|escape}"
href="{$url->postLink($post)}">{$post->getTopic()}</a>
(<a href="{$karma->getKarmaUrl($post,1)}">+{$karma->getPositiveKarma($post)}</a>
/<a href="{$karma->getKarmaUrl($post,2)}">-{$karma->getNegativeKarma($post)}</a>)</li>
{/foreach}
</p>
<p>
<p>
<strong>發言冠軍:</strong><br />
{assign var=visitors value=$topcommentvisitors->getTopCommentVisitors()}
{foreach from=$visitors item=visitor}
<li class="comment-bullet"><a title="{$visitor.user_name}"
href="{$visitor.user_url}">{$visitor.user_name}</a> ({$visitor.user_count})</li>
{/foreach}
</p>





來源:reic部落格









jianmin2 發表在 痞客邦 留言(0) 人氣()

 
  1. 安裝的方法請參考 Mark「為pLog加上置頂文章」的說明,下列僅出不同處。
  2. 請下載 lss 貼心小改版的 plog-plugin-stickyposts-20041101.zip(只有置頂分類)plog-plugin-stickyposts-20041102.zip(有公告分類及置頂分類)
  3. 安裝後,請確定外掛程式中心有stickyposts的plugin。
  4. 點選stickyposts後面的configure,進入configure介面。
  5. 在列出的文章分類裡,由list box裡選取分類做為公告分類(Announcements)及置頂分類(Sticky Category),並按下「Save Setting」按鈕儲存設定。
  6. 只有置頂分類的plugin,請按Mark文章裡的方法修改樣版,唯一的不同如下:

 

  將下面的程式加到 main.template 中:
<h3>置頂文章</h3>
{assign var=stickyposts value=$stickyposts->getStickyPosts('')}
{foreach from=$stickyposts item=stickypost}
{assign var="stickypostDate" value=$stickypost->getDateObject()}
{assign var="stickypostOwner" value=$stickypost->getUserInfo()}
<li><a href="{$url->postLink($stickypost)}">{$stickypost->getTopic()}
({$stickypost->getTotalComments()})</a> by
{$stickypostOwner->getUsername()} @
{$locale->formatDate($stickypostDate,"%Y/%m/%d")}</li>
{/foreach}
<p />

 

  1. 使用新版有兩個分類的人,請在要放置公告及置頂的樣版裡適當位置加入下面的code:

 

 <h3>Announcements</h3>
{assign var=annposts value=$stickyposts->getAnnouncePosts()}
{foreach from=$annposts item=annpost}
{assign var="annpostDate" value=$annpost->getDateObject()}
{assign var="annpostOwner" value=$annpost->getUserInfo()}
<li><a href="{$url->postLink($annpost)}">{$annpost->getTopic()}
({$annpost->getTotalComments()})</a> by {$annpostOwner->getUsername()} @
{$locale->formatDate($annpostDate,"%Y/%m/%d")}</li>
{/foreach}
<p />
<h3>Sticky Posts</h3>
{assign var=stickyposts value=$stickyposts->getStickyPosts()}
{foreach from=$stickyposts item=stickypost}
{assign var="stickypostDate" value=$stickypost->getDateObject()}
{assign var="stickypostOwner" value=$stickypost->getUserInfo()}
<li><a href="{$url->postLink($stickypost)}">{$stickypost->getTopic()}
({$stickypost->getTotalComments()})</a> by {$stickypostOwner->getUsername()} @
{$locale->formatDate($stickypostDate,"%Y/%m/%d")}</li>
{/foreach}
<p />

感謝: Mark(173) and lss(99) 
來源:reic部落格

jianmin2 發表在 痞客邦 留言(0) 人氣()

 

首先,建立一個檔案,檔名為 locale_zh_TW.php ,記得,存檔時要使用 UTF-8 No BOM 格式。

然後,把下面的程式碼貼到 locale_zh_TW.php 裡面:

<?php
$messages["secretblog_plugin"] = "秘密部落格";
$messages["secretblog_settings_saved_ok"] = "外掛程式設定值儲存成功";
$messages["secretblog_plugin_enabled_help"] = "啟用這個外掛將以密碼保護你的部落格";
$messages["secretblog_plugin_enabled"] = "啟用這個外掛";
$messages["secretblog_password"] = "密碼";
$messages["secretblog_password_help"] = "請輸入用來保護你的部落格的密碼";
$messages["pluginSecretBlogSettings"] = "秘密部落格";
$messages["manageSecurityPlugins"] = "安全性外掛";
$messages["secretblog_blog_is_password_protected"] = "你必需要提供正確的密碼才能存取這個部落格的內容";
$messages["secretblog_send"] = "傳送";
$messages["secretblog_enter_password"] = "輸入密碼";
?>

最後,把這個檔案上傳到主機,並放在 plugins/secretblog/locale/ 目錄裡面, *nix 主機的使用者,記得檢查一下檔案的擁有者和權限。

ps:  不過,使用秘密部落格外掛請注意!如果發現啟用秘密部落格外掛後, blog 裡的每個超連結都會跳到要你輸入密碼的頁面,則必需調整 php.ini 的設定來解決。這個問題目前只發生在 PHP5 。如果你使用 PHP5 ,必需注意 php.ini 的 register_long_arrays 設定必需是 On 才行。根據 PHP 官方網站的文件說明, register_long_arrays 的預設值原本就是 On 。如果發生了上述症狀,請依說明在 php.ini 裡加上或修改

register_long_arrays = On

並重新啟動 apache 應該就行了。



來源:  lss實驗室

jianmin2 發表在 痞客邦 留言(0) 人氣()

PChome 分紅網正式推出囉~推出不到一天就已經有372篇商品評論文章囉~ 想藉由推薦商品賺錢的朋友,可以藉由底下的流程來賺取分紅:

  1. 連到PChome 分紅網註冊一個帳號
  2. 利用PChome 分紅網的搜尋列來搜尋您自己覺得不錯,值得推薦給大家的商品
  3. 接著在商品頁面的右下角,可以看到”賺取紅利”,其中有三種方式可以賺取分紅:
    a. 在PChome 分紅網上寫下關於該商品的評論。
    b. 轉寄商品連結給朋友,可以附上自己推薦的原因。
    c. 轉貼商品連結到自己的部落格或是討論區,當然~自己還是得寫一些關於該商品的評論。
  4. 如果有網友因此而購買該商品,並且在30天無退貨的話,然後你就可以依照該商品設定的分紅率賺取紅利囉~每當紅利滿500點,就可以申請兌換現金。   

此外,PChome 分紅網左上角列出了五項排行榜,分別是商店分紅利率排行商店評論文章數排行評論達人排行商品評論文章數排行商品推薦成交量排行,目前在評論達人排行榜第一名的網友發表了93篇評論文章,但是成功推薦次數掛0中…,而在商品推薦成交量排行中,被成功推薦最多的商品成交數量為2次…,接著在商店分紅率排行榜中,居然有50%分紅率的商品!!!

小弟目前還在觀望中!!^^

jianmin2 發表在 痞客邦 留言(0) 人氣()

少吃為什麼能長壽?這裡的秘密可能很快就會揭開……科學研究早已發現,大幅限制食物熱量的攝入可以明顯延長老鼠和其它動物的生命,但背後的原因一直不明。現在,美國學者通過對線蟲的研究,找到了其中的"長壽基因"。他們的成果發表在最新的《自然》雜誌上。這一基因的發現意味著未來人類有可能用藥物模仿其作用,達到不用忍飢挨餓也可以長命百歲的效果。

jianmin2 發表在 痞客邦 留言(0) 人氣()

USB 隨身碟&卡姆碟工具箱】Flash Memory Toolkit 1.0 Pro


【軟體名稱】:Flash Memory Toolkit 1.0 CHT
【官方網站】:http://www.flashmemorytoolkit.com/
【軟體介紹】:

USB 隨身碟&卡姆碟工具箱。健康檢測﹨測試速度﹨備份復原﹨檔案修復的小軟體

jianmin2 發表在 痞客邦 留言(0) 人氣()

轉貼-session完整教學!! session全教程(一) -------------------------------------------------------------------------------- 一、session概述 session是什麼,剛開始我也不明白,非專業詞典翻譯為會議,會議期。作個不太恰當的比喻吧 (雖然不恰當,但意義卻是一樣的),,session是你和網站之間的感情。 session在WEB技術中佔有非常重要的份量。由於網頁是一種無狀態的連接程序,因此你無法得知 用戶的瀏覽狀態。因此我們必須 通過session記錄用戶的有關信息,以供用戶再次以此身份對web服務器提供要求時作確認,例 如,我們在某些網站中常常要求用戶登錄, 但我們怎麼知道用戶已經登錄了呢,如果沒有session的話,登錄信息是無法保留的,那豈不要讓 用戶在每一頁網頁中都要提供 用戶名和密碼。 當然,session不光用於用戶身份認證弁遄A還可能用於其它方面,以後我們會提到的。 session用中文來解釋就是會話期。一個會話期開始於用戶輸入一個站點的網址時,結束於他離開 這個站點時。 session最早出現在動態腳本語言Active Server Pages中,它的弁鄐妤j大,是一句話無法說清 楚的。 當php還在3.0版本時,session是它永遠的痛。雖然php具有執行速度快,使用靈活,弁鈺j大等 優點,但因為session的問題,使 很多站點的開發放棄了php,至少我的老闆是這樣認為的。當時有很多php免費函數庫提供在php3上 實現session的方案,但都讓人感覺不正宗。 就好像你花好幾千大洋買的手機卻配置一個很粗糙的草作的袋子一樣,雖然弁酮O一樣的,但總 讓人覺得彆扭。php4的出現讓php在session問題上 有了翻身的機會。雖然它的session實現還不是很理想(主要是效率問題),但畢竟是它自己實現 的,而且可以實際使用了。 那我們用session幹什麼呢,你說了半天,我用不上的話,你豈不有賣紙張之嫌。OK,我們來看看 session有什麼用:作過網站的人都有 這樣的體會,在一頁頁面中的變量(在本章都指服務器端變量,下同)是不能在下一頁中用的,雖 然有一些辦法可以實現,比如用form,urlstring等等 但有些對於用戶來說是不方便的,即使讓form自動提交,但其中的延時在現今的網絡狀況下足以 讓人窒息,而這兩種方法都明顯加大程序員的負擔。如果你 正在開發一個大型項目,那這些額外的負擔是不能忽略的。而有了session就好辦了,session中 註冊的變量可以作為全局變量使用。什麼,全局變量? 好極了。這樣一來,你知道有什麼用了吧:最主要的用於用戶身份認證,程序狀態記錄,頁面之間 參數傳遞。 說了它這麼半天的好處,你已經動心了吧,先別高興,它還有缺點呢:它是用文件保存的變量(當 然效率不高了,雖然可以用別的方式,但 很麻煩的),不能保存對象。與之相對的是,asp中的session可以保存對像變量,用內存變量來保 存session變量。但為什麼我們還選用php呢,呵呵, 為什麼,你能從本書的開始看到這章,想必你也應該明白了吧,你還不明白,Faint,你再從頭看起 吧,我保證你成為PHP專家^_^。 session是怎樣實現的呢?呵呵,你一定以為很高深吧,我來告訴你它的秘密。如果說只保存變量 的話,很多讀者都明白,這是很簡單的, 但前面我們說過,http協議是一種無狀態的連接,你怎麼知道那個變量是誰的,這個變量又是誰的 呢?在session實現中用cookie實現的。cookie 存在於客戶端,也就是用戶的機器中,裡面保存著用戶的session ID,也就是session號碼,當用 戶的瀏覽器請求服務器時把session ID也一起送到 服務器,這樣服務器就可以識別你是誰,也就可以把變量識別開了。這樣我們就不難理解了,為什 麼有時session會失效了。不信的話,你可以試試: 在IE的"工具"菜單上有"Internet選項"菜單,打開後再選"安全"->"自定義級別",將安全設置中 的"允釣洏峔C個對話cookies"設為禁用,再看看 session能不能用。這下明白了吧!不過php4在linux/unix平台上可以自動檢查cookies狀態,當 cookies 不可用時,自動會把session ID 附帶在url上進行傳遞。這是它在session方面比asp多的唯一的優點了。 

二、php3,4中session的實現  

在php3中是沒有session這種東東的,但我們又需要,怎麼辦呢?別急,有很多人替你做了這些,
這其中最有名的要算phplib了。你可以去國外下  
載,也可以上國內大部分php站點下載。我們要做的第一件事是讓phplib和php3結合在一起使它能
工作。為了能實現這方面的弁遄A我們需要先安裝phplib。  
跟著我來做,很容易的(以下方法在
win2000+php3.0.16+apache1.3.12+phplib7.2c+mysql3.23.21 for win32 上通過)  
phplib最基本的弁鄍]括用戶認證,Session管理,權限及數據庫的抽像化。  
怎樣使用phplib來實現session弁鄔O?  
一、首先你將phplib解開,裡面有一個目錄叫"php",將這個目錄拷貝到apache的安裝目錄下。以
下以筆者的機器為例:  
我的apache安裝在d:apache 目錄下,我將上面的"php"目錄拷貝到d:apache,並將phplib下的pages
目錄下的文件和目錄一起拷貝到  
d:apachehtdocs下,注意不帶目錄本身。  
phplib的類庫需要根據系統進行初始化,你可以修改local.inc文件,其中包含著一些基本參數,
你可以根據自己機器的實際情況來進行修改。  
將d:apachephpprepend.php3文件中的一段程序改為如下樣子:

if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {  
$_PHPLIB$"libdir"] = "d&#58;/apache/php/"; //這兒改為你放phplib下php目錄的路徑  
}  


然後將d:apachephplocal.inc文件改如下:

class DB_Example extends DB_Sql {  
var $Host = "localhost";//你的mysql數據庫所在主機名  
var $Database = "test";//數據庫名  
var $User = "root";//數據庫用戶名  
var $Password = "";//數據庫用戶口令  
}


最後一步執行解開的phplib目錄中的stuff目錄下的create_database.mysql文件,生成初始表。  
我們說明一下phplib的工作原理,每一個使用phplib的頁面首先必須可以找到運行phplib所必須
類庫文件,我們可以在php3.ini中設置auto_prepend  
變量來支持,phplib分發包中包含一個prepend.php3文件,將auto_prepend指定
為"d:/apache/php/prepend.php3"(帶引號)後,各頁面就會自動包含phplib類庫,我們還可以  
將phplib類庫所在目錄加進include變量中,以便可以找到這些文件,當然,最苯的辦法就是指定
phplib的絕對路徑,這可不是個好主意,可移植性太差!  
第二步,每一個使用phplib的頁面中,你必須首先調用page_open函數進行初始化。這會告訴
phplib,你現在或將來會用到狀態保存。一個典型的  
page_open例子如下:

<?php  
page_open(array("sess" => "Example_Session"));  
?>


數組變量(sess)用來初始化一些狀態保存對象,注意:必須使用phplib內置名(sess),這些內置
名是你在local.ini中所定義的,page_open  
函數必須在頁面內容輸出到瀏覽器之前被調用。php3腳本最後應以page_close()結束,這將會將
有關狀態數據寫回到數據庫中,如果你忘了的話,  
結果你應該能想到,哈哈,你的變量全丟了,可不要怪我沒告訴你...  

因為phplib使用了Cookies來保存狀態信息,所以page_open()函數必須在頁面內容輸出到瀏覽器
之前被調用, 這裡的頁面內容可以是任何HTML  
信息或者空行,如果你發現了錯誤"Oops - SetCookie called after header has been sent",
這表明在page_open()之前向瀏覽器輸出了些什麼,  
你要特別留意空行,因為非常難找到,典型的錯誤是在<? 和 ?>標記之間輸出了空行,你應檢查
在local.inc和prepend.php3文件中是否包含了空行,  
這也是一個非常容易出錯的地方。為了減少出錯的可能,我們可以這樣書寫初始化程序:

<?  
page_open(array("sess" => "Example_Session"));  
?>  
<html>  
.....  
</html>


第三步,具體使用。  
當一個用戶訪問了該網站後,隨即用戶的session就開始了,如果用戶的瀏覽器支持cookie的話,
將會建立一個session的id放入cookie,  
這個唯一的ID是由PHP3隨機生成,然後又用隨機種子字串進行md5加密過了的,這裡的cookie應該
叫做session cookie,因為這個cookie是不會  
寫到用戶硬盤裡去的,當一個session期結束的時候,該cookie也被完結了。如果用戶瀏覽器不支
持cookie的話,那麼 該session的id將會放入url鏈中,  
因為是加密過的,所以竊取了也沒用。session ID存放著用戶的有關信息,如用戶已認證、認證
到期時間、用戶權限,和其他一些你可能需要的信息,  
方便我們取用。  
Session其實就是用戶一次會話的過程。Session並不是僅僅用來跟蹤用戶的註冊,實際上,它還
可以有其它的使用場合,你可以用它來存儲任何你想要  
存貯的信息,這些信息可以在用戶隨後訪問的頁面中派上用場,當然前提是那些頁面要使用
PHPLIB。方法很簡單,註冊一個變量後即可在隨後的頁面中使用它,  
直至session結束。方法:

<?php $sess->register( "variable_name"); ?>  


注意,這裡的variable_name不是變量值,而是變量名,可以先指定變量名,隨後再賦值。你在某
個頁面中可以改變變量的值,隨後的頁面訪問該變量時  
會得到改變後的值。變量的類型是多樣的,可以是一個字串,一個數字,一個數組。舉例來說
明:  
第一頁:

<?php  
page_open(array("sess" => "Example_Session"));  
$sess->register( "first"); //注意變量名前不需要?$  
if (iset($firstname)) {  
$first = $firstname;  
}  
.....  
page_close();  
?>  


第二頁:

<?php  
page_open();//開始session  


echo $first;//看看效果  

page_close();//保存狀態信息  
?>  


註冊完一個變量,當頁面最後調用page_close()函數後,各個session變量會被寫回到數據庫中。
如果你忘記調用page_close()函數的話,  
變量就不會被寫回數據庫,將出現不可預知的後果。當變量被使用完畢,你不再需要用到時,可
以調用以下函數將變量刪除:

<?php  
page_open(array("sess" => "Example_Session"));  
...  
$sess->unregister( "variable_name");  
...  
page_close();  
?>  


PHPLIB 7.0中,使用了一種存儲結構,它允釦A存儲session數據到數據庫中、共享內存中或者
LDAP中。PHPLIB使用了數據庫類,這使得你有  
了更多的選擇,你可以選用oracle8,mysql,postgresql等等數據庫來保存狀態信息。  

關於phplib中的其它弁鄍H及有關session的其它函數的使用,你可以參看它帶的手冊,或上它的
網站看在線文檔。它的老家在  
http://phplib.netuse.de/index.php3 。  
php4的session實現大都從phplib學來的,它也靠cookies保存session id,用文件系統保存變量
(默認情況下)。因此,它的session  
變量不能保存對像(事實上能保存對像內容,但沒有意義,因為它是保存在磁盤上的,不是活的對
象,充其量也就是對像屍體。)不過這點的限制不是太  
大,我們在大部分情況下都只需要保存變量就行了。當然你也可以將session保存在數據庫中,下
一小節中我們會講到怎樣將session保存在數據庫中。  
在php4中由於比php3多了session支持,所以在php.ini文件中也多了session配置選項。下面我們
來看看各項的作用與意義:

$Session]  
session.save_handler = files&#59; handler used to store/retrieve data(用什麼保存session
變量,默認情況下用文件)  
session.save_path = c&#58;/temp&#59; argument passed to save_handler(保存session變量的目錄,
在linux/unix下為/tmp,在win下設為你的目錄)  &#59; in the case of files, this is the  &#59; path where data files are stored  
session.use_cookies = 1&#59; whether to use cookies(是否使用cookies,當然,在win下別無選
擇)  
session.name = PHPSESSID  &#59; name of the session(默認session使用的cookies名,建議不要改動)  &#59; is used as cookie name  
session.auto_start = 0&#59; initialize session on request startup(是否自動啟用session,當
為1時,在每頁中就可以不必調用session_start()函數了)  
session.cookie_lifetime = 0&#59; lifetime in seconds of cookie(設定 cookie 送到瀏覽器後
的保存時間,單位為秒。缺省值為 0,表示直到瀏覽器關閉。)  &#59; or if 0, until browser is restarted  
session.cookie_path = /&#59; the path the cookie is valid for(cookie)(cookies有效路徑)  
session.cookie_domain =&#59; the domain the cookie is valid for(cookies有效域名)  
session.serialize_handler = php&#59; handler used to serialize data(定義序列化數據的標
識,本弁鄍u有 WDDX 模塊或 PHP 內部使用。缺省值為 php)  &#59; php is the standard serializer of PHP  
session.gc_probability = 1&#59; percentual probability that the (設定每次臨時文件開始處
理 (gc, garbage collection) 處理概率。缺省值為 1。 )  &#59; 'garbage collection' process is started  &#59; on every session initialization  
session.gc_maxlifetime = 1440&#59; after this number of seconds, stored(設定保存session
的臨時文件被清除前的存活秒數)  &#59; data will be seen as 'garbage' and  &#59; cleaned up by the gc process  
session.referer_check =&#59; check HTTP Referer to invalidate (決定參照到客戶端的  
Session 代碼是否要刪除。有時在安全或其它考慮時,會設定不刪除。缺省值為 0。)  &#59; externally stored URLs containing ids  
session.entropy_length = 0&#59; how many bytes to read from the file(設定 session 從高熵
值資源讀取的位數。缺省值為 0.)  
session.entropy_file =&#59; specified here to create the session id(設定 session 代碼建
立時,使用外部高熵值資源或文件來建立,例如 UNIX 系統上的 /dev/random  
或 /dev/urandom。 )  &#59; session.entropy_length = 16  &#59; session.entropy_file = /dev/urandom  
session.cache_limiter = nocache&#59; set to { nocache,private,public } to (設定session  
緩衝限制)  &#59; determine HTTP caching aspects  
session.cache_expire = 180&#59; document expires after n minutes(文檔有效期,單位為分鐘)  

在windows平台下,php4.01pl2以前的版本會出現設置session.save_path 後出錯的情況,這是
php的一個bug,在php4.01pl2及以後已經修正了。如果你用以前的版本,  
你可以將session.save_path設為"./",或設為"/temp",並在你放置php腳本的當前盤根目錄下建一
個名為temp的目錄即可(我的php腳本放在d&#58;apachehtdocs下,則我在d&#58;盤根目錄下建一名為temp
的目錄)。  
在php4中有關session的函數主要有以下這些:  

session_start&#58; 初始化session,需要用session的每一個頁面最開始處調用。  
session_destroy&#58; 結束 session,在需要結束session處調。  
session_name&#58; 存取目前 session 名稱。  
session_module_name&#58; 存取目前 session 模塊。  
session_save_path&#58; 存取目前 session 路徑。  
session_id&#58; 存取目前 session id號。  
session_register&#58; 註冊新的session變量。  
session_unregister&#58; 刪除已註冊session變量。  
session_is_registered&#58; 檢查session變量是否註冊。  
session_decode&#58; Session 數據解碼。  
session_encode&#58; Session 數據?密。   


通常情況下我們只需要調用三個函數即可。  
即sesssion_start()、session_register()、session_is_registered()。  
在需要用到session的每一頁的最開始處調用session_start()函數,  
一個典型的使用session的頁面如下:

<?session_start()?>  
<html>  
....  
<body>  
<?  
$var="hello";  
session_register("var");//註冊$var變量,注意沒有$符號  


if(session_is_registered("var"))//檢查變量是否註冊  
echo "haha,註冊了!";  
else  
echo "sorry,還沒有註冊!";  

?>  
</body>  
</html>


php4中session處理的定制  

我們需要擴充6個函數,當然這些函數不需你去調用,對我們來說是透明的。  

這幾個函數是:  
sess_open($sess_path, $session_name);  

這個函數被session處理程序調用來作初始化工作。需要傳給它的兩個參數是$sess_path,它對應
你的php.ini文件中的session.save_path  
選項;$session_name,它對應php.ini中的session.name 選項。它們具體怎樣工作,請看下面的例
子。  

sess_close();  

這個函數在頁面結束執行並且session處理程序需要關閉時被調用。(注意,不要和sess_destory
混淆了,它是用來結束session的)  

sess_read($key);  

這個函數在session處理程序讀取指定session鍵值($key)時。  
這個函數檢索並返回標識為$key的session數據.(注意:你不用擔心怎樣序列化和反序列化數據,
如果你不知道這是什麼意思,不要擔心它)  

譯者註:序列化是將變量或對像在程序結束或需要時保存在文件中,在下次程序運行或需要時再
調入內存的技術,有別於只保存數據的方法。  

sess_write($key, $val);  

這個函數據在session處理程序需要將數據保存時調用,這種情況經常在你的程序結束時發生。  
它負責將數據保存在下次能用sess_read($key)函數檢索的地方。  

sess_destroy($key);  

這個函數在需要消毀session時。它負責刪除session並且清除環境。  


sess_gc($maxlifetime);  
這個函數負責清理碎片。在這種情況下,它負責刪除過時的session數據。session處理程序會偶
爾調用它們。  

現在我們已經清楚了我們提供的函數。  

定製程序可以用mysql數據庫或DBM文件保存session數據。取決於你的需要。  
如果你決定使用mysql作支持,那需要作以下工作:  

首先我們在mysql中創建一個sessions數據庫,並且創建一個sessions表。先運行你的mysql客戶
端並且執行下面的命令:  
mysql> CREATE DATABASE sessions;  

mysql> GRANT select, insert, update, dele ON sessions.* TO phpsession@localhost  
-> IDENTIFIED BY 'phpsession';  

mysql> CREATE TABLE sessions (  
-> sesskey char(32) not null,  
-> expiry int(11) unsigned not null,  
-> value text not null,  
-> PRIMARY KEY (sesskey)  
-> );  

下一步,修改session_mysql.php文件的$SESS_DB* 變量使其匹配你機器上的數據庫設置。  

(很抱歉,由於版權原因,我不能把以下代碼中的英文去掉,只好加些註釋了  
=============================================================

<?  
/* ------------------------------------------------------------------------  
* session_mysql.php  
* ------------------------------------------------------------------------  
* PHP4 MySQL Session Handler  
* Version 1.00  
* by Ying Zhang (ying@zippydesign.com)  
* Last Modified&#58; May 21 2000  
*  
* ------------------------------------------------------------------------  
* TERMS OF USAGE&#58;  
* ------------------------------------------------------------------------  
* You are free to use this library in any way you want, no warranties are  
* expressed or implied. This works for me, but I don't guarantee that it  
* works for you, USE AT YOUR OWN RISK.  
*  
* While not required to do so, I would appreciate it if you would retain  
* this header information. If you make any modifications or improvements,  
* please send them via email to Ying Zhang <ying@zippydesign.com>.  
*  
* ------------------------------------------------------------------------  
* DESCRIPTION&#58;  
* ------------------------------------------------------------------------  
* This library tells the PHP4 session handler to write to a MySQL database  
* instead of creating individual files for each session.  
*  
* Create a new database in MySQL called "sessions" like so&#58;  
*  
* CREATE TABLE sessions (  
* sesskey char(32) not null,  
* expiry int(11) unsigned not null,  
* value text not null,  
* PRIMARY KEY (sesskey)  
* );  
*  
* ------------------------------------------------------------------------  
* INSTALLATION&#58;  
* ------------------------------------------------------------------------  
* Make sure you have MySQL support compiled into PHP4. Then copy this  
* script to a directory that is accessible by the rest of your PHP  
* scripts.  
*確信你的php4有mysql支持,然後把這個腳本拷貝到和你的php腳本有關的目錄。  
* ------------------------------------------------------------------------  
* USAGE&#58;(使用方法)  
* ------------------------------------------------------------------------  
* Include this file in your scripts before you call session_start(), you  
* don't have to do anything special after that.  
*包含這個文件到你要使用session的文件中,必須在調用session_start()之前,否則,  
*會很慘的,不要怪我沒告訴你。 這樣就不需要再做什麼工作了,還和你以前用session的方法一
樣。  
*/  

$SESS_DBHOST = "localhost"; /* database server hostname */  
$SESS_DBNAME = "sessions"; /* database name */  
$SESS_DBUSER = "phpsession"; /* database user */  
$SESS_DBPASS = "phpsession"; /* database password */  

$SESS_DBH = "";  
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");  

function sess_open($save_path, $session_name) {  
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;  

if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {  
echo "<li>Can't connect to $SESS_DBHOST as $SESS_DBUSER";  
echo "<li>MySQL Error&#58; ", mysql_error();  
die;  
}  

if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {  
echo "<li>Unable to select database $SESS_DBNAME";  
die;  
}  

return true;  
}  

function sess_close() {  
return true;  
}  

function sess_read($key) {  
global $SESS_DBH, $SESS_LIFE;  

$qry = "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " . time();  
$qid = mysql_query($qry, $SESS_DBH);  

if (list($value) = mysql_fetch_row($qid)) {  
return $value;  
}  

return false;  
}  

function sess_write($key, $val) {  
global $SESS_DBH, $SESS_LIFE;  

$expiry = time() + $SESS_LIFE;  
$value = addslashes($val);  

$qry = "INSERT INTO sessions VALUES ('$key', $expiry, '$value')";  
$qid = mysql_query($qry, $SESS_DBH);  

if (! $qid) {  
$qry = "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey  
= '$key' AND expiry > " . time();  
$qid = mysql_query($qry, $SESS_DBH);  
}  

return $qid;  
}  

function sess_destroy($key) {  
global $SESS_DBH;  

$qry = "DELETE FROM sessions WHERE sesskey = '$key'";  
$qid = mysql_query($qry, $SESS_DBH);  

return $qid;  
}  

function sess_gc($maxlifetime) {  
global $SESS_DBH;  

$qry = "DELETE FROM sessions WHERE expiry < " . time();  
$qid = mysql_query($qry, $SESS_DBH);  

return mysql_affected_rows($SESS_DBH);  
}  

session_set_save_handler(  
"sess_open",  
"sess_close",  
"sess_read",  
"sess_write",  
"sess_destroy",  
"sess_gc");  
?>  


=================================================================  
定制使用dbm文件時的接口  
=================================================================

<?  
/* ------------------------------------------------------------------------  
* session_dbm.php  
* ------------------------------------------------------------------------  
* PHP4 DBM Session Handler  
* Version 1.00  
* by Ying Zhang (ying@zippydesign.com)  
* Last Modified&#58; May 21 2000  
*  
* ------------------------------------------------------------------------  
* TERMS OF USAGE&#58;  
* ------------------------------------------------------------------------  
* You are free to use this library in any way you want, no warranties are  
* expressed or implied. This works for me, but I don't guarantee that it  
* works for you, USE AT YOUR OWN RISK.  
*  
* While not required to do so, I would appreciate it if you would retain  
* this header information. If you make any modifications or improvements,  
* please send them via email to Ying Zhang <ying@zippydesign.com>.  
*  
* ------------------------------------------------------------------------  
* DESCRIPTION&#58;  
* ------------------------------------------------------------------------  
* This library tells the PHP4 session handler to write to a DBM file  
* instead of creating individual files for each session.  
*  
* ------------------------------------------------------------------------  
* INSTALLATION&#58;  
* ------------------------------------------------------------------------  
* Make sure you have DBM support compiled into PHP4. Then copy this  
* script to a directory that is accessible by the rest of your PHP  
* scripts.  
*確信你的php4有DBM支持。拷貝這個文件在你的php腳本目錄。  
* ------------------------------------------------------------------------  
* USAGE&#58;  
* ------------------------------------------------------------------------  
* Include this file in your scripts before you call session_start(), you  
* don't have to do anything special after that.  
* 在調用session_start()之前請包含這個文件。之後就不需要作什麼工作了。  
*/  

$SESS_DBM = "";  
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");  

function sess_open($save_path, $session_name) {  
global $SESS_DBM;  

$SESS_DBM = dbmopen("$save_path/$session_name", "c");  
return ($SESS_DBM);  
}  

function sess_close() {  
global $SESS_DBM;  

dbmclose($SESS_DBM);  
return true;  
}  

function sess_read($key) {  
global $SESS_DBM, $SESS_LIFE;  

$var = "";  
if ($tmp = dbmfetch($SESS_DBM, $key)) {  
$expires_at = substr($tmp, 0, strpos($tmp, "│"));  

if ($expires_at > time()) {  
$var = substr($tmp, strpos($tmp, "│") + 1);  
}  
}  

return $var;  
}  

function sess_write($key, $val) {  
global $SESS_DBM, $SESS_LIFE;  

dbmreplace($SESS_DBM, $key, time() + $SESS_LIFE . "│" . $val);  
return true;  
}  

function sess_destroy($key) {  
global $SESS_DBM;  

dbmdele($SESS_DBM, $key);  
return true;  
}  

function sess_gc($maxlifetime) {  
global $SESS_DBM;  

$now = time();  
$key = dbmfirstkey($SESS_DBM);  
while ($key) {  
if ($tmp = dbmfetch($SESS_DBM, $key)) {  
$expires_at = substr($tmp, 0, strpos($tmp, "│"));  
if ($now > $expires_at) {  
sess_destroy($key);  
}  
}  

$key = dbmnextkey($SESS_DBM, $key);  
}  
}  

session_set_save_handler(  
"sess_open",  
"sess_close",  
"sess_read",  
"sess_write",  
"sess_destroy",  
"sess_gc");  
?>


=================================================================  
具體怎麼用就不用多說了,因為這些函數都是php引擎調用的,與我們無關的。我們只需照上述配
置後就行了,你用的還是以前的session函數。  
看看下面的代碼就知道了:)  


session定制的測試代碼  
==================================================================

<?  
/* ------------------------------------------------------------------------  
* test.php  
* ------------------------------------------------------------------------  
* PHP4 Customer Session Handler Test Script  
* Version 1.00  
* by Ying Zhang (ying@zippydesign.com)  
* Last Modified&#58; May 21 2000  
*/  

/* default to DBM handler */  
if (! isset($handler)) {  
$handler = "dbm";  
}  

/* default action is increment */  
if (! isset($action)) {  
$action = "increment";  
}  

/* load up the appropriate session handling script, depending on the handler */  
if ($handler == "dbm") {  
include("session_dbm.php");  

} elseif ($handler == "mysql") {  
include("session_mysql.php");  

} else {  
echo "<li>Unrecognized handler ($handler)";  
die;  
}  

/* start the session and register a simple counter */  
session_start();  
session_register("count");  

/* figure out what we should do, depending on the action */  
switch ($action) {  
case "increment" &#58;  
$count = isset($count) ? $count + 1 &#58; 0;  
break;  

case "destroy" &#58;  
session_destroy();  
break;  

case "gc" &#58;  
$maxlife = get_cfg_var("session.gc_maxlifetime");  
sess_gc($maxlife);  
break;  

default&#58;  
echo "<li>Unknown action ($action)";  
break;  
}  
?>  

<h1>Session Test Script</h1>  
<ul>  
<li>Handler&#58; <b><?=$handler?></b>  
<li>Action&#58; <b><?=$action?></b>  
<li>Count&#58; <b><?=$count?></b>  
</ul>  

<hr size=1>  
<form>  
<table>  
<tr>  
<td>Handler&#58;</td>  
<td>  
<select name="handler">  
<option value="dbm">DBM</option>  
<option value="mysql">MySQL</option>  
</select>  
</td>  
</tr>  
<tr>  
<td>Action&#58;</td>  
<td>  
<select name="action">  
<option value="increment">Increment</option>  
<option value="destroy">Session Destroy</option>  
<option value="gc">Force Garbage Collection</option>  
</select>  
</td>  
</tr>  
<tr>  
<td></td>  
<td><br><input type="submit"></td>  
</tr>  
</table>  
</form>  

jianmin2 發表在 痞客邦 留言(0) 人氣()

 http://chensh.loxa.edu.tw/php/A_1.php


http://dyna.nc.hcc.edu.tw/php/index.htm

PHP5網管實驗室
http://www.php5.idv.tw/

 PHP 研習
http://tino.loxa.edu.tw/php/

http://linux.tnc.edu.tw/techdoc/banic/

php
 http://php.igt.com.tw/

EcStart 論壇論壇
  都是跟php有相關的主題!
http://bbs.ecstart.com/index.php

 

jianmin2 發表在 痞客邦 留言(0) 人氣()