綠色資源(yuán)網:您身邊最放心的安全下載站! 最(zuì)新軟件|熱門排行|軟件分類|軟件(jiàn)專(zhuān)題|廠(chǎng)商大全

綠色資源網

技術(shù)教程(chéng)
您的位置:首頁(yè)網絡編程PHP編(biān)程(chéng) → PHP中session使用方法詳解

PHP中(zhōng)session使用方法詳解

我要評論 2015/02/18 15:38:02 來源:綠色資源網 編輯:ynaad.com [大(dà) ] 評論:0 點擊:378次

PHP中session詳解
  綜述(shù)
  Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽(lǎn)器關閉所經過的這段時間(jiān),也就是用戶瀏覽這個網站所(suǒ)花費的時間。從上述的定義中我們可以看到,Session實際上是一(yī)個特定(dìng)的時間概(gài)念。
  一(yī)般來說,在網站上某一個頁麵中的變量(指服務器端變量,下同)是不(bú)能在下一(yī)頁中用的,有了session就好辦了(le)。session中注冊(cè)的變量可以作為全(quán)局變量使用。這樣(yàng)我們就可(kě)以將session用(yòng)於用戶身份認證,程序狀態記錄,頁麵之間參數傳(chuán)遞。
  在PHP3版本中是(shì)如何實現session的?
  php3本身是沒有實現session功能的,我們隻有(yǒu)用其(qí)他的方法來實現,這其中最有名的要算phplib了(le)。phplib最基本的功能包括用戶認證、Session管理(lǐ)、權限及數據庫的抽象化。下麵(miàn)我們就講(jiǎng)述一下如何用phplib實現session。
  1、首先安裝phplib(環境(jìng)為win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 for win32)
  首先將phplib解開,裏(lǐ)麵有一個"php"目錄,將這個(gè)目錄拷貝到Apache的安裝(zhuāng)目錄下(xià)。例如:Apache安裝在d:\Apache 目錄下,那麽就將"php"目錄拷貝到d:\Apache,並將phplib目錄的pages目錄下(不包括目錄本身)的文(wén)件和目錄一起拷貝(bèi)到d:\Apache\htdocs下。
  phplib的類庫需要根據係統進行初始化,可能需要修改local.inc文件,其中包含著一些基本參數,可以根(gēn)據自己機器(qì)的實(shí)際情況來進行修(xiū)改(gǎi)。
  將d:\Apache\php\prepend.php文(wén)件中的一(yī)段程序改為如下樣子:
    if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
      $_PHPLIB["libdir"] = "d:/Apache/php/"; //放phplib下php目錄的路(lù)徑
    }
  修改d:\Apache\php\local.inc文件:
    class DB_Example extends DB_Sql {
      var $Host = "localhost"; //mysql數據庫(kù)所在主機名
      var $Database = "test"; //數據庫名
      var $User = "root"; //數據(jù)庫用戶(hù)名
      var $Password = "1234567"; //數據庫用戶密碼
    }
  最後根據phplib目錄下的stuff子(zǐ)目錄中的create_database.mysql文件生成初始表。
  由於每一個使用phplib的頁麵首先必須可以找到運行phplib所(suǒ)必需的類庫文(wén)件,我們可以在php.ini中設置(zhì)auto_prepend變量來支持,phplib中包含一個prepend.php文件(jiàn),並將auto_prepend指定為"d:/Apache/php/prepend.php"(帶引號)後,各頁麵就會自動包(bāo)含phplib類庫,我們還可以將phplib類(lèi)庫所在目錄加進include變量中,以(yǐ)便可以找到這(zhè)些(xiē)文(wén)件。
2、調用page_open()函數
  在(zài)每一個使用phplib的頁麵中,必須首先調用page_open函數進行初始化,例如:
  <?php
  page_open(array("sess" => "Test_Session"));
  ?>
  數(shù)組變量(sess)用來初始化一些狀態保存對象,這裏應該(gāi)注意:必須使用phplib內置名(sess),這些內置名是在(zài)local.inc中所定義的.。
  因為phplib使用(yòng)了Cookies來保存狀態信息,所以page_open()函數必(bì)須在頁麵內容輸出到瀏覽器之前被調用。php腳本最後應以page_close()結束,這將會將有關狀態數據寫回到數據庫中,否(fǒu)則變量會丟失(shī)。
  3、具體使用。
  注(zhù)冊一個變量後(hòu)即可在隨後的頁麵中使用它(tā),直至session結束。方法:
    <?php $sess->register( "varname"); ?>
  注(zhù)意,這(zhè)裏的varname不(bú)是變(biàn)量值,而是(shì)變量(liàng)名,可以先指定變量名,隨後再賦值。你在某個頁麵中(zhōng)可以改變變(biàn)量的值,隨後的頁麵訪問該變量時會得到改(gǎi)變(biàn)後的值。變量的類型是多樣的,可以是一個字符串,一個數字,一個數組。舉例來說明:
  第一頁:
    <?php
    page_open(array("sess" => "Test _Session"));
    $sess->register( "welcome"); //注冊變量$welcome,注(zhù)意不需要加(jiā)$
    $welcome="Hello,PHP world!";
    ……
    page_close();
    ?>
  第二頁:
    <?php
    page_open();//開始session
    echo $welcome;//顯示第一頁中定義(yì)的$welcome
    page_close();//保存狀態信息
    ?>
  注(zhù)冊完一個變量,當頁麵最後調用page_close()函數後,各個session變量會被寫回(huí)到(dào)數據庫中。如果忘記調用page_close()函數的話,變量就不會被寫回(huí)數據庫,這樣將出現不可預知的後果。當變量被使(shǐ)用完(wán)畢,不再需要(yào)用到(dào)時,可以調用以下函數將變量刪除:
    <?php
    page_open(array("sess" => "Test _Session"));
    ……
    $sess->unregister( "variable_name");
    ……
    page_close();
    ?>
  在PHP4版本中是如何實現session的?
  php4的session也靠cookies保存session id,用文件係(xì)統保(bǎo)存變量(默認情況下),因此,它的session變量(liàng)不(bú)能保存對象。當然也可以將session保存在數據庫中。
  在php4中有關session的函數很多(詳見(jiàn)php.ini配置一(yī)文),通常情況下我們隻需要調用三個函數即可:sesssion_start()、session_register()、session_is_registered()。
  在需要用到session的每一頁的最開(kāi)始處調用session_start()函數, 例如:
    <?session_start()?>
    <html><body>
    <?
    $welcome="hello world !";
    session_register("welcome");//注冊$welcome變(biàn)量,注意沒有$符號
    if(session_is_registered("welcome"))//檢查(chá)$welcome變量是否注冊
      echo "welcome變量已經注冊了!";
    else
      echo "welcome變量還沒有注冊!";
    ?>
    </body></html>
  php4中session處理的定製(zhì)
  我們需要擴充(chōng)6個函數:
    sess_open($sess_path, $session_name);
    這個函數被session處理程序調用來作初始化工(gōng)作。
    參數$sess_path對應php.ini文(wén)件中的session.save_path選項
    參數$session_name對應php.ini中的session.name 選項。
    sess_close();
    這個函數(shù)在頁麵結束執行並且session處(chù)理程序需要關閉時被調用
    sess_read($key);
    這個(gè)函數在session處理程序(xù)讀(dú)取指定session鍵值($key)時,檢索並返回標識為$key的session數據.(注意:序列化是將變量或對象在程序結(jié)束或需要時保存在文件中,在下次程序運行或(huò)需要時再調入內存的技術,有別於隻保存數據(jù)的方法。)
    sess_write($key, $val);
    這個函數據在session處理程序需要將數據保存時調(diào)用,這種情況(kuàng)經常在程序結(jié)束時發生(shēng)。它負責將數據保存在下次能用sess_read($key)函數檢索的地方。
    sess_destroy($key);
    這個函數在(zài)需要消毀session時。它負責(zé)刪除(chú)session並(bìng)且清除環境。
    sess_gc($maxlifetime);
    這個函數負責清理碎片(piàn)。在這種情況下,它負責刪(shān)除過時的session數據(jù)。session處(chù)理程序會偶爾調用它們。
  定製程序可以用mysql數據庫或DBM文件保存session數據,視具體的情況而(ér)定。如果(guǒ)使用mysql作支持,那還需要進行以下的步驟:
  首先(xiān)在mysql中創建一(yī)個sessions數(shù)據庫,並且創建一個sessions表:
  mysql> CREATE DATABASE sessions;
  mysql> GRANT select, insert, update, delete 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文件的(de)$SESS_DB* 變量使(shǐ)其匹配你機器上的數據庫設置:
<?
$SESS_DBHOST = "localhost"; /* 數據庫(kù)主機名 */
$SESS_DBNAME = "sessions"; /* 數據庫名 */
$SESS_DBUSER = "phpsession"; /* 數據庫用戶名 */
$SESS_DBPASS = "phpsession"; /* 數據(jù)庫密碼 */
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//定製函數
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
  定製使用dbm文件(jiàn)時的接

關鍵詞:PHP,session

閱讀本文後(hòu)您有(yǒu)什(shí)麽感想(xiǎng)? 已有 人給出評價!

  • 1 歡迎喜歡
  • 457 白癡
  • 1 拜托
  • 1 哇
  • 2 加油
  • 1 鄙視
免费人欧美成又黄又爽的视频丨一本色道久久88综合日韩精品丨国产专区日韩精品欧美色丨午夜无遮挡男女啪啪视频丨国产欧美日韩综合精品一区二区丨亚洲精品无码不卡在线播HE丨亚洲精品国产精品国自产观看丨日韩国产高清av不卡