日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP開發中session應用詳解

瀏覽:25日期:2024-02-04 13:03:20

Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。從上述的定義中我們可以看到,Session實際上是一個特定的時間概念。

一般來說,在網站上某一個頁面中的變量(指服務器端變量,下同)是不能在下一頁中用的,有了session就好辦了。session中注冊的變量可以作為全局變量使用。這樣我們就可以將session用于用戶身份認證,程序狀態記錄,頁面之間參數傳遞。

在PHP3版本中是如何實現session的?

php3本身是沒有實現session功能的,我們只有用其他的方法來實現,這其中最有名的要算phplib了。phplib最基本的功能包括用戶認證、Session管理、權限及數據庫的抽象化。下面我們就講述一下如何用phplib實現session。

1、首先安裝phplib(環境為win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 for win32)

首先將phplib解開,里面有一個'php'目錄,將這個目錄拷貝到Apache的安裝目錄下。例如:Apache安裝在d:Apache 目錄下,那么就將'php'目錄拷貝到d:Apache,并將phplib目錄的pages目錄下(不包括目錄本身)的文件和目錄一起拷貝到d:Apachehtdocs下。

phplib的類庫需要根據系統進行初始化,可能需要修改local.inc文件,其中包含著一些基本參數,可以根據自己機器的實際情況來進行修改。

將d:Apachephpprepend.php文件中的一段程序改為如下樣子:

if (!isset($_PHPLIB) or !is_array($_PHPLIB)) { $_PHPLIB['libdir'] = 'd:/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 = '1234567'; //數據庫用戶密碼 };

最后根據phplib目錄下的stuff子目錄中的create_database.mysql文件生成初始表。

由于每一個使用phplib的頁面首先必須可以找到運行phplib所必需的類庫文件,我們可以在php.ini中設置auto_prepend變量來支持,phplib中包含一個prepend.php文件,并將auto_prepend指定為'd:/Apache/php/prepend.php'(帶引號)后,各頁面就會自動包含phplib類庫,我們還可以將phplib類庫所在目錄加進include變量中,以便可以找到這些文件。 2、調用page_open()函數

在每一個使用phplib的頁面中,必須首先調用page_open函數進行初始化,例如:

<?php page_open(array('sess' => 'Test_Session')); ?>;

數組變量(sess)用來初始化一些狀態保存對象,這里應該注意:必須使用phplib內置名(sess),這些內置名是在local.inc中所定義的.。

因為phplib使用了Cookies來保存狀態信息,所以page_open()函數必須在頁面內容輸出到瀏覽器之前被調用。php腳本最后應以page_close()結束,這將會將有關狀態數據寫回到數據庫中,否則變量會丟失。

3、具體使用。

注冊一個變量后即可在隨后的頁面中使用它,直至session結束。方法:

<?php $sess->register( 'varname'); ?>

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

第一頁:

<?php  page_open(array('sess' => 'Test _Session'));  $sess->register( 'welcome'); //注冊變量$welcome,注意不需要加$  $welcome='Hello,PHP world!'; …… page_close(); ?>;

第二頁:

<?php  page_open();//開始session  echo $welcome;//顯示第一頁中定義的$welcome page_close();//保存狀態信息 ?>;

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

<?php  page_open(array('sess' => 'Test _Session'));  …… $sess->unregister( 'variable_name');  …… page_close(); ?>;

在PHP4版本中是如何實現session的?

php4的session也靠cookies保存session id,用文件系統保存變量(默認情況下),因此,它的session變量不能保存對象。當然也可以將session保存在數據庫中。

在php4中有關session的函數很多(詳見php.ini配置一文),通常情況下我們只需要調用三個函數即可:sesssion_start()、session_register()、session_is_registered()。

在需要用到session的每一頁的最開始處調用session_start()函數, 例如:

<?session_start()?> <html><body> <?  $welcome='hello world !';  session_register('welcome');//注冊$welcome變量,注意沒有$符號  if(session_is_registered('welcome'))//檢查$welcome變量是否注冊 echo 'welcome變量已經注冊了!';  else echo 'welcome變量還沒有注冊!'; ?> </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_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> 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文件的$SESS_DB* 變量使其匹配你機器上的數據庫設置:

<?$SESS_DBHOST = 'localhost'; /* 數據庫主機名 */ $SESS_DBNAME = 'sessions'; /* 數據庫名 */ $SESS_DBUSER = 'phpsession'; /* 數據庫用戶名 */ $SESS_DBPASS = 'phpsession'; /* 數據庫密碼 */$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文件時的接口 :

<?$SESS_DBM = ''; $SESS_LIFE = get_cfg_var('session.gc_maxlifetime');

……//定制函數

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

session定制的測試代碼:

<?php……if ($handler == 'dbm') include('session_dbm.php');//使用何種接口elseif ($handler == 'mysql') include('session_mysql.php'); else ……

session_start(); session_register('count'); ……?>;

在身份驗證中,怎樣應用Session?

Session可以用于用戶認證 :

驗證用戶是否合法:

<?  session_start();  ……//驗證過程 session_register('reguser'); ?>;

在另一頁面中檢查用戶是否登錄

<?  session_start();  if(isset($reguser)&&$reguser!=''){//如果已經登錄 echo '親愛的用戶,歡迎你';  }else{//如果沒有登錄 echo '請先注冊!';  }?>;

用戶退出登錄:

<?  session_destroy();  ……?>;

如何實現多session并發運行?

問題提出:我在為所在單位編寫一個進銷存系統中發現需要讓多個用戶可以同時進入一個php應用程序。原來設計的靜態的唯一的session ID導致數據混亂。這樣,動態生成一個唯一的session ID成為當務之急。

解決辦法很簡單:我用了php文件名+時間戳為唯一的session ID,這樣在我的程序中的每個session就各就各位,不再混亂了。

下面把我的源代碼公布,方便也有同樣的問題的朋友多一個解決方法。

//Start a PHP session to preserve variables.if ( empty($mysessionname) ) { $micro = microtime(); $micro = str_replace(' ','',$micro); // strip out the blanks $micro = str_replace('.','',$micro); // strip out the periods $mysessionname = 'po_maint' . $micro;}session_name($mysessionname);session_start()

程序注釋:

用mysessionname為頁面間唯一的sessionname傳遞變量,如果你也用到這個名字必須把上述程序做個小小的改動。Mysessionname不能為session的內部變量名,因為他在session開始之前就已經存在了。Mysessionname也不能用cookie方式存放,因為多個session肯定會覆蓋掉原先的cookie文件。你可以用隱含表單的域來保存它。這樣就不會有問題。

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩午夜免费| 国产不卡一区| 日韩av资源网| 日本99精品| 日韩精品欧美大片| 日本亚洲最大的色成网站www| 蜜芽一区二区三区| 亚洲乱码久久| 日韩精品免费视频一区二区三区| 日韩和欧美一区二区三区| 亚欧成人精品| 日韩av电影一区| 国产精品theporn| 国产精品久久久久久妇女| 欧美激情亚洲| 日本欧美国产| 黄色aa久久| 久久国产亚洲精品| 午夜国产一区二区| 免费不卡在线视频| 国产日韩一区二区三免费高清| 国产精品白丝av嫩草影院| 国内精品美女在线观看| av综合电影网站| 精品中文字幕一区二区三区av| 国产精品试看| 欧美一区影院| 92国产精品| 亚洲色图网站| 久久中文字幕一区二区| 国产高清不卡| 免费观看不卡av| 中文字幕亚洲精品乱码| 麻豆精品视频在线观看| 国产麻豆久久| 蜜臀va亚洲va欧美va天堂 | 日韩成人精品一区| 99久久久久国产精品| 亚洲天堂av资源在线观看| 久久精品97| 欧洲亚洲一区二区三区| 伊人www22综合色| 美女视频免费精品| 亚洲手机在线| 日韩有吗在线观看| 国产成人久久精品一区二区三区| 亚洲电影在线| 日韩一区二区三区免费视频 | 快she精品国产999| 国产精品嫩模av在线| 国产一区二区精品久| 午夜精品网站| 久久xxx视频| 91成人精品| 国产精品伦一区二区| 1024精品一区二区三区| 天堂精品久久久久| 国产不卡人人| 综合国产精品| 成人片免费看| 日韩精品成人| 999久久久91| 日本亚洲欧洲无免费码在线| 欧美aa一级| 国产日韩亚洲| 99在线|亚洲一区二区| 牛牛精品成人免费视频| 午夜欧美理论片| 国产精品国码视频| 免费日韩视频| 日韩精品2区| 日韩黄色av| 影音先锋国产精品| 高潮久久久久久久久久久久久久| 美国三级日本三级久久99| 欧美香蕉视频| 欧美91在线| 亚洲精品无吗| 欧美丝袜一区| 卡一卡二国产精品| 天堂久久av| 欧美日韩免费观看一区=区三区| 麻豆传媒一区二区三区| 亚洲ww精品| 亚洲在线免费| 欧美日韩中文一区二区| 九九久久国产| 欧美日韩1区2区3区| 中文一区二区| 在线中文字幕播放| 国产福利一区二区精品秒拍 | 日韩免费精品| 国产精品毛片| 久久中文字幕av| 最新中文字幕在线播放| 国产精品久久亚洲不卡| 青青青国产精品| 中文字幕免费精品| 好吊日精品视频| 欧美久久天堂| 成午夜精品一区二区三区软件| 久久黄色影视| 中文字幕日本一区二区| 亚洲欧美日本国产专区一区| 久久久久久久久99精品大| 岛国精品一区| 精品黄色一级片| 国产精品久久久久77777丨| 亚洲开心激情| 亚洲综合色婷婷在线观看| 中文久久精品| 麻豆91精品| 免费观看久久久4p| 中文精品电影| 欧美成人午夜| 免费久久精品| 激情婷婷久久| 国产一区日韩欧美| 麻豆精品蜜桃| 亚洲福利精品| 欧美日韩免费观看一区=区三区| 久久国产电影| 国产在线不卡| 欧美成人高清| 红桃视频国产一区| 精品中文一区| 国产视频亚洲| 美女久久一区| 免播放器亚洲一区| 久久成人一区| 久久av在线| 日韩中出av| 日韩不卡免费视频| 欧美伊人久久| 国产精品.xx视频.xxtv| 黄色欧美在线| 色爱av综合网| 欧美午夜不卡| 亚洲涩涩av| 欧美日韩一区自拍| 久久亚洲黄色| 色爱av综合网| 免费精品视频| 国产欧美二区| 精品国产aⅴ| 亚洲天堂资源| 国产日韩综合| 欧美伊人影院| 日韩电影二区| 中文日韩在线| 国产日韩一区二区三区在线| 成人午夜毛片| 午夜久久一区| 日韩av字幕| 91日韩欧美| 黄色免费成人| 青草久久视频| 国产精品成久久久久| 91精品精品| 麻豆久久精品| 国产精久久久| 精品一区亚洲| 国产欧美高清视频在线| 日韩中文在线播放| 婷婷亚洲精品| 精品一区电影| 午夜欧美在线| 国产日韩欧美高清免费| www在线观看黄色| 久久午夜影视| 麻豆成人在线观看| 欧美日韩免费观看一区=区三区 | 国内精品麻豆美女在线播放视频| 欧美日韩尤物久久| 中文一区一区三区免费在线观 | 最近国产精品视频| 嫩呦国产一区二区三区av| 美女亚洲一区| 国产精品欧美一区二区三区不卡 | 中文字幕在线免费观看视频| 在线日韩成人| 国产精品福利在线观看播放| 亚洲欧美视频一区二区三区| 国产伦理久久久久久妇女| 欧美日韩在线二区| 国产精品4hu.www| 亚洲免费观看| 国产一区丝袜| 亚洲毛片在线免费| 水蜜桃精品av一区二区| 亚洲制服一区| 亚洲无线一线二线三线区别av| 国产一卡不卡| 国产精品普通话对白| 国产69精品久久| 午夜亚洲福利| 欧美日中文字幕| 麻豆精品一区二区综合av| 蘑菇福利视频一区播放| 亚洲国产欧美日本视频|