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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP開發(fā)中session應(yīng)用詳解

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

Session指的就是用戶在瀏覽某個(gè)網(wǎng)站時(shí),從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過(guò)的這段時(shí)間,也就是用戶瀏覽這個(gè)網(wǎng)站所花費(fèi)的時(shí)間。從上述的定義中我們可以看到,Session實(shí)際上是一個(gè)特定的時(shí)間概念。

一般來(lái)說(shuō),在網(wǎng)站上某一個(gè)頁(yè)面中的變量(指服務(wù)器端變量,下同)是不能在下一頁(yè)中用的,有了session就好辦了。session中注冊(cè)的變量可以作為全局變量使用。這樣我們就可以將session用于用戶身份認(rèn)證,程序狀態(tài)記錄,頁(yè)面之間參數(shù)傳遞。

在PHP3版本中是如何實(shí)現(xiàn)session的?

php3本身是沒(méi)有實(shí)現(xiàn)session功能的,我們只有用其他的方法來(lái)實(shí)現(xiàn),這其中最有名的要算phplib了。phplib最基本的功能包括用戶認(rèn)證、Session管理、權(quán)限及數(shù)據(jù)庫(kù)的抽象化。下面我們就講述一下如何用phplib實(shí)現(xiàn)session。

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

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

phplib的類庫(kù)需要根據(jù)系統(tǒng)進(jìn)行初始化,可能需要修改local.inc文件,其中包含著一些基本參數(shù),可以根據(jù)自己機(jī)器的實(shí)際情況來(lái)進(jìn)行修改。

將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數(shù)據(jù)庫(kù)所在主機(jī)名 var $Database = 'test'; //數(shù)據(jù)庫(kù)名 var $User = 'root'; //數(shù)據(jù)庫(kù)用戶名 var $Password = '1234567'; //數(shù)據(jù)庫(kù)用戶密碼 };

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

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

在每一個(gè)使用phplib的頁(yè)面中,必須首先調(diào)用page_open函數(shù)進(jìn)行初始化,例如:

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

數(shù)組變量(sess)用來(lái)初始化一些狀態(tài)保存對(duì)象,這里應(yīng)該注意:必須使用phplib內(nèi)置名(sess),這些內(nèi)置名是在local.inc中所定義的.。

因?yàn)閜hplib使用了Cookies來(lái)保存狀態(tài)信息,所以page_open()函數(shù)必須在頁(yè)面內(nèi)容輸出到瀏覽器之前被調(diào)用。php腳本最后應(yīng)以page_close()結(jié)束,這將會(huì)將有關(guān)狀態(tài)數(shù)據(jù)寫回到數(shù)據(jù)庫(kù)中,否則變量會(huì)丟失。

3、具體使用。

注冊(cè)一個(gè)變量后即可在隨后的頁(yè)面中使用它,直至session結(jié)束。方法:

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

注意,這里的varname不是變量值,而是變量名,可以先指定變量名,隨后再賦值。你在某個(gè)頁(yè)面中可以改變變量的值,隨后的頁(yè)面訪問(wèn)該變量時(shí)會(huì)得到改變后的值。變量的類型是多樣的,可以是一個(gè)字符串,一個(gè)數(shù)字,一個(gè)數(shù)組。舉例來(lái)說(shuō)明:

第一頁(yè):

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

第二頁(yè):

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

注冊(cè)完一個(gè)變量,當(dāng)頁(yè)面最后調(diào)用page_close()函數(shù)后,各個(gè)session變量會(huì)被寫回到數(shù)據(jù)庫(kù)中。如果忘記調(diào)用page_close()函數(shù)的話,變量就不會(huì)被寫回?cái)?shù)據(jù)庫(kù),這樣將出現(xiàn)不可預(yù)知的后果。當(dāng)變量被使用完畢,不再需要用到時(shí),可以調(diào)用以下函數(shù)將變量刪除:

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

在PHP4版本中是如何實(shí)現(xiàn)session的?

php4的session也靠cookies保存session id,用文件系統(tǒng)保存變量(默認(rèn)情況下),因此,它的session變量不能保存對(duì)象。當(dāng)然也可以將session保存在數(shù)據(jù)庫(kù)中。

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

在需要用到session的每一頁(yè)的最開始處調(diào)用session_start()函數(shù), 例如:

<?session_start()?> <html><body> <?  $welcome='hello world !';  session_register('welcome');//注冊(cè)$welcome變量,注意沒(méi)有$符號(hào)  if(session_is_registered('welcome'))//檢查$welcome變量是否注冊(cè) echo 'welcome變量已經(jīng)注冊(cè)了!';  else echo 'welcome變量還沒(méi)有注冊(cè)!'; ?> </body></html>;

php4中session處理的定制

我們需要擴(kuò)充6個(gè)函數(shù):

·sess_open($sess_path, $session_name);

這個(gè)函數(shù)被session處理程序調(diào)用來(lái)作初始化工作。參數(shù)$sess_path對(duì)應(yīng)php.ini文件中的session.save_path選項(xiàng)參數(shù)$session_name對(duì)應(yīng)php.ini中的session.name 選項(xiàng)。

·sess_close();

這個(gè)函數(shù)在頁(yè)面結(jié)束執(zhí)行并且session處理程序需要關(guān)閉時(shí)被調(diào)用

·sess_read($key);

這個(gè)函數(shù)在session處理程序讀取指定session鍵值($key)時(shí),檢索并返回標(biāo)識(shí)為$key的session數(shù)據(jù).(注意:序列化是將變量或?qū)ο笤诔绦蚪Y(jié)束或需要時(shí)保存在文件中,在下次程序運(yùn)行或需要時(shí)再調(diào)入內(nèi)存的技術(shù),有別于只保存數(shù)據(jù)的方法。)

·sess_write($key, $val);

這個(gè)函數(shù)據(jù)在session處理程序需要將數(shù)據(jù)保存時(shí)調(diào)用,這種情況經(jīng)常在程序結(jié)束時(shí)發(fā)生。它負(fù)責(zé)將數(shù)據(jù)保存在下次能用sess_read($key)函數(shù)檢索的地方。

·sess_destroy($key);

這個(gè)函數(shù)在需要消毀session時(shí)。它負(fù)責(zé)刪除session并且清除環(huán)境。

·sess_gc($maxlifetime);

這個(gè)函數(shù)負(fù)責(zé)清理碎片。在這種情況下,它負(fù)責(zé)刪除過(guò)時(shí)的session數(shù)據(jù)。session處理程序會(huì)偶爾調(diào)用它們。

定制程序可以用mysql數(shù)據(jù)庫(kù)或DBM文件保存session數(shù)據(jù),視具體的情況而定。如果使用mysql作支持,那還需要進(jìn)行以下的步驟:

首先在mysql中創(chuàng)建一個(gè)sessions數(shù)據(jù)庫(kù),并且創(chuàng)建一個(gè)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* 變量使其匹配你機(jī)器上的數(shù)據(jù)庫(kù)設(shè)置:

<?$SESS_DBHOST = 'localhost'; /* 數(shù)據(jù)庫(kù)主機(jī)名 */ $SESS_DBNAME = 'sessions'; /* 數(shù)據(jù)庫(kù)名 */ $SESS_DBUSER = 'phpsession'; /* 數(shù)據(jù)庫(kù)用戶名 */ $SESS_DBPASS = 'phpsession'; /* 數(shù)據(jù)庫(kù)密碼 */$SESS_DBH = ''; $SESS_LIFE = get_cfg_var('session.gc_maxlifetime');

……//定制函數(shù)

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

定制使用dbm文件時(shí)的接口 :

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

……//定制函數(shù)

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

session定制的測(cè)試代碼:

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

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

在身份驗(yàn)證中,怎樣應(yīng)用Session?

Session可以用于用戶認(rèn)證 :

驗(yàn)證用戶是否合法:

<?  session_start();  ……//驗(yàn)證過(guò)程 session_register('reguser'); ?>;

在另一頁(yè)面中檢查用戶是否登錄

<?  session_start();  if(isset($reguser)&&$reguser!=''){//如果已經(jīng)登錄 echo '親愛(ài)的用戶,歡迎你';  }else{//如果沒(méi)有登錄 echo '請(qǐng)先注冊(cè)!';  }?>;

用戶退出登錄:

<?  session_destroy();  ……?>;

如何實(shí)現(xiàn)多session并發(fā)運(yùn)行?

問(wèn)題提出:我在為所在單位編寫一個(gè)進(jìn)銷存系統(tǒng)中發(fā)現(xiàn)需要讓多個(gè)用戶可以同時(shí)進(jìn)入一個(gè)php應(yīng)用程序。原來(lái)設(shè)計(jì)的靜態(tài)的唯一的session ID導(dǎo)致數(shù)據(jù)混亂。這樣,動(dòng)態(tài)生成一個(gè)唯一的session ID成為當(dāng)務(wù)之急。

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

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

//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為頁(yè)面間唯一的sessionname傳遞變量,如果你也用到這個(gè)名字必須把上述程序做個(gè)小小的改動(dòng)。Mysessionname不能為session的內(nèi)部變量名,因?yàn)樗趕ession開始之前就已經(jīng)存在了。Mysessionname也不能用cookie方式存放,因?yàn)槎鄠€(gè)session肯定會(huì)覆蓋掉原先的cookie文件。你可以用隱含表單的域來(lái)保存它。這樣就不會(huì)有問(wèn)題。

標(biāo)簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线人成日本视频| 欧美精品一区二区久久| 日韩久久一区二区三区| 精品国产亚洲一区二区在线观看| 日韩美女国产精品| 亚洲狼人精品一区二区三区| 亚洲欧美日韩视频二区| 偷拍欧美精品| 亚洲一区二区网站| 综合国产精品| 香蕉久久一区| 国产精品亚洲欧美| 国产精品一区亚洲| 九九久久国产| 久久一区二区三区电影| 麻豆亚洲精品| 国产日韩欧美在线播放不卡| 九九久久国产| 一区二区自拍| 日本在线成人| 久久精品一本| 欧洲毛片在线视频免费观看| 国产一区二区精品| 清纯唯美亚洲综合一区| 麻豆中文一区二区| 美女亚洲一区| 国产精品极品国产中出| 老司机精品视频在线播放| 欧美香蕉视频| 蜜臀a∨国产成人精品| 麻豆精品视频在线观看免费| 精品一区三区| 欧美在线看片| 香蕉精品视频在线观看| 日韩av不卡一区二区| 福利在线免费视频| 日韩精品中文字幕吗一区二区| 精品三级av| 日韩欧美美女在线观看| 都市激情国产精品| 青青草国产成人99久久| 欧美精品一卡| 另类欧美日韩国产在线| 亚洲欧美日韩国产一区| 美女av在线免费看| 欧美aa在线视频| 亚洲精品少妇| 亚洲国产综合在线看不卡| 红杏一区二区三区| 日韩中文字幕| 日韩中文字幕亚洲一区二区va在线| 麻豆成人在线观看| 91欧美极品| 日本一区二区中文字幕| 国产精品免费看| 波多野结衣一区| 波多野结衣久久精品| 伊人久久大香伊蕉在人线观看热v| 99视频一区| 日本一区二区中文字幕| 亚洲一区二区三区高清不卡| 999久久久亚洲| 中文字幕成在线观看| 国产伦精品一区二区三区视频| 石原莉奈一区二区三区在线观看| re久久精品视频| 国产在线不卡| 亚洲国产专区| 日韩网站在线| 蜜臀精品一区二区三区在线观看 | 欧美日韩18| 亚洲v天堂v手机在线| 日韩精品欧美大片| 国产亚洲精aa在线看| 国产精品对白| 国产美女久久| 国产一区三区在线播放| 国产成人精品亚洲日本在线观看| 激情亚洲影院在线观看| 亚洲精品小说| 欧美在线看片| 国内揄拍国内精品久久| 亚洲伦乱视频| 九一精品国产| 97成人在线| 亚洲精品.com| 免费欧美在线视频| 国产精久久久| 欧美影院三区| 欧美精品国产| 欧美亚洲精品在线| 国产亚洲欧美日韩在线观看一区二区| 精品在线网站观看| 国产精品日韩| 日产午夜精品一线二线三线| 亚洲欧美日韩精品一区二区| 精品视频在线观看网站| 欧美中文字幕一区二区| 国产精品一区二区美女视频免费看| 日本一区二区高清不卡| 蜜臀精品一区二区三区在线观看 | 国产精品v日韩精品v欧美精品网站| 国产粉嫩在线观看| 亚洲精品高潮| 亚洲91久久| 国产精品红桃| 石原莉奈一区二区三区在线观看| 久久av综合| 性一交一乱一区二区洋洋av| 日韩伦理福利| 国产亚洲一区| 亚洲久久视频| 国产一级久久| 久久影院一区| 精品视频高潮| 国产精品综合| 亚洲欧美不卡| 蜜桃精品在线| 亚洲一区资源| 激情综合五月| 免费一级欧美在线观看视频| 日本中文字幕不卡| 国产亚洲在线| 午夜国产精品视频| 久久久久久美女精品| 国产成人精品三级高清久久91| 亚洲精品高潮| 日本一不卡视频| 日韩国产欧美一区二区三区| 亚洲三级观看| 欧美一级久久| 国产乱码精品| 国产一区2区在线观看| 精品91福利视频| 欧美日韩视频免费观看| 欧美日韩国产v| 国产国产精品| 欧美日韩国产亚洲一区| 偷拍欧美精品| 亚洲伊人精品酒店| 欧美日韩一区二区三区不卡视频 | 91九色精品| 免费看精品久久片| 91嫩草精品| 久久久久久自在自线| 99精品一区| 午夜天堂精品久久久久| 麻豆一区二区三区| 精品亚洲二区| 91精品国产乱码久久久久久久| 性欧美xxxx免费岛国不卡电影| 亚洲深夜av| 国产欧美二区| 成人羞羞视频播放网站| 亚洲香蕉久久| 精品国产乱码久久久| 婷婷激情久久| 国产精品一区二区三区美女| 成人看片网站| 欧美亚洲一级| 久久影院一区| 麻豆精品蜜桃视频网站| 午夜精品影院| 91午夜精品| 亚洲午夜电影| 欧美精品成人| 伊人www22综合色| 日本韩国欧美超级黄在线观看| 亚洲精一区二区三区| 在线观看精品| 国产精品香蕉| 亚洲综合激情在线| 亚洲一级特黄| 久久中文精品| 日韩精品一区二区三区中文在线| 色综合狠狠操| 国产精品流白浆在线观看| 亚洲激情黄色| av中文资源在线资源免费观看| 亚洲精品综合| 久久最新视频| 欧美一区二区三区高清视频| 精品一区av| 麻豆久久一区| 国产精品欧美三级在线观看 | 免费一级欧美在线观看视频| 久久av一区二区三区| 久久久精品久久久久久96| 国产精品xx| 国产aⅴ精品一区二区四区| 国产精品一区二区av日韩在线| 亚洲精品乱码日韩| 波多野结衣一区| 亚洲精品在线观看91| 久久婷婷av| 秋霞国产精品| 久久国产中文字幕| 激情欧美一区| 亚洲在线观看| 水野朝阳av一区二区三区|