程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP session入門之功能詳解二

PHP session入門之功能詳解二

編輯:關於PHP編程

        在php3中是沒有session這種東東的,但我們又需要,怎麼辦呢?別急,有很多人替你做了這些,這其中最有名的要算phplib了。你可以去國外下載,可以上國內大部分php站點下載。我們要做的第一件事是讓phplib和php3結合在一起使它能工作。為了能實現這方面的功能,我們需要先安裝phplib。跟著我來做,很容易的(以下方法在 win2000 php3.0.16 apache1.3.12 phplib7.2c mysql3.23.21 for win32 上通過)phplib最基本的功能包括用戶認證,Session管理,權限及數據庫的抽象化。

怎樣使用phplib來實現session功能呢?
        一、首先你將phplib解開,裡面有一個目錄叫"php",將這個目錄拷貝到apache的安裝目錄下。以筆者的機器為例:我的 apache安裝在d:/apache目錄下,我將上面的"php"目錄拷貝到d:a/pache,並將phplib下的pages 目錄下的文件和目錄一起拷貝到 d:/apache/htdocs下,注意不帶目錄本身。phplib的類庫需要根據系統進行初始化,你可以修改local.inc文件,其中包含著一些基本參數,你可以根據自己機器的實際情況來進行修改。 將d:/apache/php/prepend.php3文件中的一段程序改為如下樣子:
if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
        $_PHPLIB["libdir"] = "d:/apache/php/"; //這兒改為你放phplib下php目錄的路徑
}
然後將d:/apache/php/local.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中,使用了一種存儲結構,它允許你存儲session數據到數據庫中、共享內存中或者LDAP中。PHPLIB使用了數據庫類,這使得你有了更多的選擇,你可以選用oracle8,mysql,postgresql等等數據庫來保存狀態信息。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved