国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

簡單PHP會(huì)話(session)說明介紹

2024-05-04 23:49:17
字體:
供稿:網(wǎng)友

現(xiàn)在程序員愈發(fā)的不容易了,想要精通,必然要尋本溯源,這其實(shí)與目前泛濫的愈發(fā)高級的語言以及眾多的框架剛好相反,因?yàn)樗鼈冊诒M可能的掩蓋本源使其簡單,個(gè)人稱之為程序員學(xué)習(xí)悖論。

注:作者接觸web開發(fā)和php兩周左右,以下內(nèi)容適合初學(xué)者。

1、導(dǎo)讀

從文題目看,<簡單PHP會(huì)話(Session)說明> 是已經(jīng)圈定了本文的內(nèi)容范圍,試圖闡明Session(文中對會(huì)話稱為Session) 在PHP語言中是如何實(shí)現(xiàn)以及使用的,重點(diǎn)在于基本理解后的使用。

文章思路是首先搞清楚session是什么東西,Session有什么用,Session使用的套路是什么,PHP中是如何使用的。

2、會(huì)話(Session)說明

開始前,首先推薦一本基礎(chǔ)理論書《HTTP權(quán)威指南》,是程序員基礎(chǔ)必備知識,作者有電子版,有需要的可以留言。

a. Session的由來

幾乎每個(gè)人都上網(wǎng),數(shù)以億計(jì)的數(shù)據(jù)在網(wǎng)絡(luò)中相互傳輸,數(shù)據(jù)之所以能夠安全的傳輸,是基于HTTP協(xié)議的,很是耳熟能詳是吧。其實(shí)HTTP協(xié)議所干的事情就是提供完成你的網(wǎng)絡(luò)訪問一系列方法,雙方構(gòu)建了一次訪問,原則上就是一個(gè)會(huì)話建立了。說一個(gè)例子:小明在瀏覽器中輸入https://www.baidu.com/(HTTPS是HTTP的加密版本,相比是增加了SSL加密層),這是小明對百度發(fā)起了一個(gè)請求,說:“我要看你的界面”,百度的服務(wù)器們收到信息,信息中包括了小名想干的事情,同時(shí)包括了小明的地址(否則百度不知道把內(nèi)容給誰了),服務(wù)器核對信息OK,對小明這個(gè)請求進(jìn)行備案,發(fā)送出小名想要的東西,一次完整的請求結(jié)束了。 這就是一次會(huì)話,會(huì)話的核心在于小明的信息備案(其實(shí)還涉及到TCP/IP的連接問題,這個(gè)與本文無關(guān),忽略)。

其實(shí)與其說是構(gòu)建了一個(gè)Session,倒不如說將一次訪問概括為一個(gè)Session。

b. Session能干什么用

從上面內(nèi)容可以得到,每一個(gè)訪問都是一個(gè)會(huì)話,服務(wù)器都要備案信息,這是有開銷的,同時(shí)呢,也不大可能同一個(gè)人連續(xù)訪問十次二十次就構(gòu)建保存十次二十次,一個(gè)是增加開銷,另一個(gè)是也比較蠢了。也就是說,一個(gè)人(確切說是同一個(gè)電腦和瀏覽器),在某個(gè)特定時(shí)間內(nèi),能夠復(fù)用一個(gè)Session的,為什么在特定時(shí)間內(nèi)呢?因?yàn)镾ession是有默認(rèn)的過期時(shí)間,過期后服務(wù)器就清理掉了(如果不這樣,你想想世界那么多人,來一個(gè)保留一個(gè),太虧)。

ok,既然同一個(gè)人,多次訪問都是一個(gè)Session(不要懷疑服務(wù)器無法判別是同一個(gè)人,具體可以看上面推介的書),而且每次訪問的內(nèi)容都是做備案的,那么也就是說,你Session周期內(nèi)所有的行為服務(wù)器都是知道的,那么接下來重要的作用就來了,服務(wù)器通過對你的訪問請求分析,能夠獲知到這個(gè)特定用戶的行為偏好的,通過做一定的分析,能夠推送一些用戶喜歡關(guān)心的數(shù)據(jù),廣告定向也就是這么來的。 

當(dāng)然可能還有其他的用戶,性能等等之類的,個(gè)人不是特別理解機(jī)理,這里就這樣。

3、PHP中Session的使用

通過上面的啰嗦,可以發(fā)現(xiàn),Session這個(gè)概念其實(shí)是在服務(wù)器端發(fā)生的。PHP提供了一系列的配置、函數(shù)等,很好的實(shí)現(xiàn)Session功能。Session支持在 PHP 中是在并發(fā)訪問時(shí)由一個(gè)方法來保存某些數(shù)據(jù).從而使你能夠構(gòu)建更多的定制程序 從而提高你的 web 網(wǎng)站的吸引力. 一個(gè)訪問者訪問你的 web 網(wǎng)站將被分配一個(gè)唯一的 id, 就是所謂的session id. 這個(gè) id 可以存儲在用戶端的一個(gè) cookie 中,也可以通過 URL 進(jìn)行傳遞.會(huì)話支持允許你將請求中的數(shù)據(jù)保存在超全局?jǐn)?shù)組$_SESSION中. 當(dāng)一個(gè)訪問者訪問你的網(wǎng)站,PHP 將自動(dòng)檢查(如果 session.auto_start 被設(shè)置為 1)或者在你要求下檢查(明確通過session_start()或者隱式通過session_register()) 當(dāng)前session id 是否是先前發(fā)送的請求創(chuàng)建. 如果是這種情況, 那么先前保存的環(huán)境將被重建.

a. php中session基本用法

通過為每個(gè)獨(dú)立用戶分配唯一的Session ID,可以實(shí)現(xiàn)針對不同用戶分別存儲數(shù)據(jù)的功能。 會(huì)話通常被用來在多個(gè)頁面請求之間保存及共享信息。 一般來說,Session ID 通過 cookie 的方式發(fā)送到瀏覽器,并且在服務(wù)器端也是通過會(huì)話 ID 來取回會(huì)話中的數(shù)據(jù)。 如果請求中不包含會(huì)話 ID 信息,那么 PHP 就會(huì)創(chuàng)建一個(gè)新的Session,并為新創(chuàng)建的Session分配新的 ID。

Session的工作流程很簡單。當(dāng)開始一個(gè)Session時(shí),PHP 會(huì)嘗試從請求中查找Session ID (通常通過Session cookie), 如果請求中不包含Session ID 信息,PHP 就會(huì)創(chuàng)建一個(gè)新的Session。 Session開始之后,PHP 就會(huì)將Session中的數(shù)據(jù)設(shè)置到 $_SESSION變量中。 當(dāng) PHP 停止的時(shí)候,它會(huì)自動(dòng)讀取$_SESSION中的內(nèi)容,并將其進(jìn)行序列化, 然后發(fā)送給會(huì)話保存管理器器來進(jìn)行保存。默認(rèn)情況下,PHP 使用內(nèi)置的文件Session保存管理器(files)來完成Session的保存。 也可以通過配置項(xiàng)session.save_handler(php.ini中配置項(xiàng)目)來修改所要采用的Session保存管理器。 對于文件Session保存管理器,Session會(huì)話數(shù)據(jù)保存到配置項(xiàng)session.save_path (php.ini中配置項(xiàng)目)所指定的位置。可以通過調(diào)用函數(shù)session_start來手動(dòng)開始一個(gè)會(huì)話。 如果配置項(xiàng)session.auto_start 設(shè)置為1, 那么請求開始的時(shí)候,Session會(huì)自動(dòng)開始。PHP 腳本執(zhí)行完畢之后,session會(huì)自動(dòng)關(guān)閉。 同時(shí),也可以通過調(diào)用函數(shù)session_wirte_close() 來手動(dòng)關(guān)閉會(huì)話。

b. php中session信息在php.ini中配置

這部分內(nèi)容放在這里說是因?yàn)?,不說明前面問題,鬼知道php.ini中的配置是什么東西。 上面提到的session.save_handler和session.save_path,這兩個(gè)就是php.ini中的配置項(xiàng)目,這里面這塊不細(xì)說,因?yàn)閜hp手冊實(shí)在是太詳細(xì)了。本文默認(rèn)模式是files。

c. php中的session機(jī)制

session_start()是session機(jī)制的開始,session會(huì)判斷當(dāng)前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE鍵值,如果不存在會(huì)生成一個(gè)session_id,然后把生成的session_id作為COOKIE的值傳遞到客戶端.相當(dāng)于執(zhí)行了下面COOKIE 操作。相反,如果存在session_id =$_COOKIE[session_name];然后去session.save_path指定的文件夾里去找名字為'SESS_'.session_id()的文件.讀取文件的內(nèi)容反序列化,然后放到$_SESSION中。

在會(huì)話結(jié)束的時(shí)候,會(huì)執(zhí)行Session寫入操作或是手工執(zhí)行session_write_close()操作。

代碼里面銷毀Session一般有三個(gè)方法,    

1. setcookie(session_name(),session_id(),time() -8000000,..); //退出登錄前執(zhí)行

2. usset($_SESSION); //這會(huì)刪除所有的$_SESSION數(shù)據(jù),刷新后,有COOKIE傳過來,但是沒有數(shù)據(jù)。

3. session_destroy(); //刪除$_SESSION 刪除session文件以及session_id

附錄,引用網(wǎng)絡(luò)上的一段代碼,作為結(jié)尾吧。

<span style="white-space:pre">  </span>//SESSION初始化的時(shí)候調(diào)用    function open($save_path, $session_name)    {     global $sess_save_path;     $sess_save_path=$save_path;     return(true);    }     //關(guān)閉的時(shí)候調(diào)用    function close()    {     return(true);    }     function read($id)    {     global $sess_save_path;     $sess_file="$sess_save_path/sess_$id";     return (string) @file_get_contents($sess_file);    }    //腳本執(zhí)行結(jié)束之前,執(zhí)行寫入操作    function write($id,$sess_data)    {      global$sess_save_path;      $sess_file="$sess_save_path/sess_$id";     if ($fp= @fopen($sess_file,"w")) {      $return=fwrite($fp,$sess_data);      fclose($fp);      return$return;     } else {      return(false);     }     }         function destroy($id)    {     global $sess_save_path;      $sess_file="$sess_save_path/sess_$id";     return(@unlink($sess_file));    }     function gc($maxlifetime)    {     global$sess_save_path;      foreach (glob("$sess_save_path/sess_*") as$filename) {      if (filemtime($filename) +$maxlifetime<time()) {       @unlink($filename);      }     }     return true;    }

以上這篇簡單PHP會(huì)話(session)說明介紹就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 屏东县| 广汉市| 曲阳县| 北碚区| 宜兰市| 治多县| 江西省| 鄯善县| 钟祥市| 黔南| 漳州市| 新源县| 浦城县| 天等县| 平昌县| 大冶市| 会同县| 咸阳市| 库车县| 松阳县| 大姚县| 卫辉市| 鹿邑县| 靖宇县| 乐山市| 北安市| 新巴尔虎右旗| 安庆市| 盐边县| 江口县| 阿坝县| 长葛市| 上饶市| 江永县| 洪洞县| 克东县| 洱源县| 庄浪县| 乌海市| 梅州市| 天镇县|