最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過代碼實例解析PHP session工作原理

 更新時間:2020年12月11日 11:03:37   作者:ノGHJ  
這篇文章主要介紹了通過代碼實例解析PHP session工作原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這里的介紹主要是基于php語言,其他的語言操作可能會有差別,但基本的原理不變。

1.在php中如何操作session:

session_start(); //使用該函數(shù)打開session功能

$_SESSION  //使用預(yù)定義全局變量操作數(shù)據(jù)

使用unset($_SESSION['key']) //銷毀一個session的值

簡單地操作,一切都是由服務(wù)器實現(xiàn);由于處理在后臺,一切看起來也很安全。但是session采用什么樣機制,又是怎樣被實現(xiàn),并且如何來保持會話的狀態(tài)的呢?

2.session實現(xiàn)與工作原理

瀏覽器和服務(wù)器采用http無狀態(tài)的通訊,為了保持客戶端的狀態(tài),使用session來達到這個目的。然而服務(wù)端是怎么樣標示不同的客戶端或用戶呢?

這里我們可以使用生活中的一個例子,假如你參加一個晚會,認識了很多人,你會采取什么方式來區(qū)分不同的人呢!你可能根據(jù)臉型,也有可能根據(jù)用戶的名字,

或者人的身份證,即采用一個獨一無二的標示。在session機制中,也采用了這樣的一個唯一的session_id來標示不同的用戶,不同的是:瀏覽器每次請求都會帶上

由服務(wù)器為它生成的session_id.

原理很簡單,假設(shè)你訪問網(wǎng)頁時就像逛澡堂,第一次進去你是沒有鑰匙的,這個時候你交了錢服務(wù)臺就分配一把鑰匙給你,你走到哪里都要帶上,因為這是你身份的唯一標識,接下來你用這把鑰匙可以去打開一個專有的儲物柜存儲你的衣物,游完泳,你再用鑰匙去打開柜子拿出衣物,最后離開游泳池時,把鑰匙歸還,你的這次游泳的過程就是一次session,或者叫做會話,在這個例子中,鑰匙就是session的key,而儲物柜可以理解為存儲用戶會話信息的介質(zhì)。

那么在web server中如何實現(xiàn)session呢?想必看了上面的例子你會很容易理解,主要是解決兩個問題,一個是鑰匙的問題,一個是存儲用戶信息的問題。對于第一個問題,即什么東西可以讓你每次請求都會自動帶到服務(wù)器呢?如果你比較了解http協(xié)議,那么答案一目了然,就是cookie,如果你想為用戶建立一次會話,可以在用戶授權(quán)成功時給他一個cookie,叫做會話id,它當然是唯一的,比如php就會為建立會話的用戶默認set一個名為phpsessid,值看起來為一個隨機字符串的cookie,如果下次發(fā)現(xiàn)用戶帶了這個cookie,服務(wù)器就知道,哎呀,剛剛這位顧客來了。

剩下的是解決第二個問題,即如何存儲用戶的信息,服務(wù)器知道會話id為abc的用戶來了,那abc想存儲自己的私人信息,比如購物車信息,如何處理?這個時候可以用內(nèi)存、也可以用文件,也可以用數(shù)據(jù)庫了,但有個要求是,數(shù)據(jù)需要用用戶的會話id即可取到,比如php就默認會把會話id為abc的用戶會話數(shù)據(jù)存儲到/tmp/phpsess_abc的文件里面,每次讀取都要反序列化程序可以理解的數(shù)據(jù),寫的時候又需要序列化為持久的數(shù)據(jù)格式。

較好理解的描述:

session被用于表示一個持續(xù)的連接狀態(tài),在網(wǎng)站訪問中一般指代客戶端瀏覽器的進程從開啟到結(jié)束的過程。session其實就是網(wǎng)站分析的訪問(visits)度量,表示一個訪問的過程。

session的常見實現(xiàn)形式是會話cookie(session cookie),即未設(shè)置過期時間的cookie,這個cookie的默認生命周期為瀏覽器會話期間,只要關(guān)閉瀏覽器窗口,cookie就消失了。實現(xiàn)機制是當用戶發(fā)起一個請求的時候,服務(wù)器會檢查該請求中是否包含sessionid,如果未包含,則系統(tǒng)會創(chuàng)造一個名為JSESSIONID的輸出 cookie返回給瀏覽器(只放入內(nèi)存,并不存在硬盤中),并將其以HashTable的形式寫到服務(wù)器的內(nèi)存里面;當已經(jīng)包含sessionid是,服務(wù)端會檢查找到與該session相匹配的信息,如果存在則直接使用該sessionid,若不存在則重新生成新的 session。這里需要注意的是session始終是有服務(wù)端創(chuàng)建的,并非瀏覽器自己生成的?!〉菫g覽器的cookie被禁止后session就需要用get方法的URL重寫的機制或使用POST方法提交隱藏表單的形式來實現(xiàn)。

簡單介紹一下流程:當客戶端訪問服務(wù)器時,服務(wù)器根據(jù)需求設(shè)置session,將會話信息保存在服務(wù)器上,同時將標示session的session_id傳遞給客戶端瀏覽器,

瀏覽器將這個session_id保存在內(nèi)存中(還有其他的存儲方式,例如寫在url中),我們稱之為無過期時間的cookie。瀏覽器關(guān)閉后,這個cookie就清掉了,它不會存在用戶的cookie臨時文件。

以后瀏覽器每次請求都會額外加上這個參數(shù)值,再服務(wù)器根據(jù)這個session_id,就能取得客戶端的數(shù)據(jù)狀態(tài)。

如果客戶端瀏覽器意外關(guān)閉,服務(wù)器保存的session數(shù)據(jù)不是立即釋放,此時數(shù)據(jù)還會存在,只要我們知道那個session_id,就可以繼續(xù)通過請求獲得此session的信息;但是這個時候后臺的session還存在,但是session的保存有一個過期

時間,一旦超過規(guī)定時間沒有客戶端請求時,他就會清除這個session。

下面介紹一下session的存儲機制,默認的session是保存在files中,即以文件的方式保存session數(shù)據(jù)。在php中主要根據(jù)php.ini的配置session.save_handler

來選擇保存session的方式。

這里順便說明一下,如果要做服務(wù)器的lvs,即多臺server的話,我們一般使用memcached的方式session,否則會導致一些請求找不到session。

一個簡單的memcache配置:

session.save_handler = memcache

session.save_path = "tcp://10.28.41.84:10001"

當然如果一定要使用files文件緩存,我們可以將文件作nfs

,將所有的保存session文件定位到一個地方。

剛才講返回給用戶的session-id最終保存在內(nèi)存中,這里我們也可以設(shè)置參數(shù)將其保存在用戶的url中。

3.實例問題

現(xiàn)有系統(tǒng)A,B; 假設(shè)A系統(tǒng)是可以獨立運行的web系統(tǒng),即可以和瀏覽器直接處理session, B系統(tǒng)是基于mobile的,需要調(diào)用A系統(tǒng)的功能接口,

在保持A不改變的情況下,即登陸驗證,session存儲都不變的情況下,B系統(tǒng)能處理前端用戶的請求。

這里提供的方案是使用PHP實現(xiàn)

在用戶登陸成功后,將保存的session的session-id返回給B系統(tǒng),然后B系統(tǒng)每次請求其他接口都帶session_id。

A系統(tǒng)在session_start前加上session_id(session_id);

這樣B系統(tǒng)就能安全的調(diào)用A

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • php網(wǎng)站地圖生成類示例

    php網(wǎng)站地圖生成類示例

    網(wǎng)站地圖對于一個網(wǎng)站來說至關(guān)重要,網(wǎng)站本身自己創(chuàng)建網(wǎng)站地圖并提交給搜索引擎,是更好的方法。這樣的話,你可以不受頁面數(shù)量的限制,并且可以完全控制網(wǎng)站地圖的結(jié)構(gòu)信息,這里介紹一個小類,可以很方便的生成網(wǎng)站地圖

    2014-01-01
  • PHP實現(xiàn)圖片壓縮

    PHP實現(xiàn)圖片壓縮

    這篇文章主要為大家詳細介紹了PHP實現(xiàn)圖片壓縮,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • PHP獲取短鏈接跳轉(zhuǎn)后的真實地址和響應(yīng)頭信息的方法

    PHP獲取短鏈接跳轉(zhuǎn)后的真實地址和響應(yīng)頭信息的方法

    這篇文章主要介紹了PHP獲取短鏈接跳轉(zhuǎn)后的真實地址和響應(yīng)頭信息的方法,本文使用get_headers函數(shù)實現(xiàn),需要的朋友可以參考下
    2014-07-07
  • ThinkPHP查詢語句與關(guān)聯(lián)查詢用法實例

    ThinkPHP查詢語句與關(guān)聯(lián)查詢用法實例

    這篇文章主要介紹了ThinkPHP查詢語句與關(guān)聯(lián)查詢用法,以實例的形式常見的查詢方法,包括數(shù)組作為查詢條件及對象方式來查詢等技巧,需要的朋友可以參考下
    2014-11-11
  • Yii2框架實現(xiàn)數(shù)據(jù)庫常用操作總結(jié)

    Yii2框架實現(xiàn)數(shù)據(jù)庫常用操作總結(jié)

    本篇文章主要介紹了Yii2框架實現(xiàn)數(shù)據(jù)庫常用操作總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • CI框架開發(fā)新浪微博登錄接口源碼完整版

    CI框架開發(fā)新浪微博登錄接口源碼完整版

    說明:本貼只適合CI框架。功能實現(xiàn):登錄接口跳轉(zhuǎn)鏈接成功,獲取用戶信息(包括最重要的u_id)成功,將用戶于本地平臺連接起來,用戶登錄成功后信息的存儲,本地數(shù)據(jù)庫第三方登錄表的設(shè)計。總之接口流程已全部完成。每個關(guān)鍵步驟我?guī)缀醵加凶⑨專v解詳細。
    2014-05-05
  • PHP 的比較運算與邏輯運算詳解

    PHP 的比較運算與邏輯運算詳解

    下面小編就為大家?guī)硪黄狿HP 的比較運算與邏輯運算詳解。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • 50個優(yōu)秀經(jīng)典PHP算法大集合 附源碼

    50個優(yōu)秀經(jīng)典PHP算法大集合 附源碼

    這篇文章主要介紹了50個優(yōu)秀經(jīng)典PHP算法大集合 附源碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • PHP實現(xiàn)簡單計算器小程序

    PHP實現(xiàn)簡單計算器小程序

    這篇文章主要為大家詳細介紹了PHP實現(xiàn)簡單計算器小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • thinkPHP分頁功能實例詳解

    thinkPHP分頁功能實例詳解

    這篇文章主要介紹了thinkPHP分頁功能,結(jié)合完整實例形式分析了thinkPHP基于商品模型實現(xiàn)分頁功能的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05

最新評論

临漳县| 登封市| 南川市| 景德镇市| 塔河县| 鹤岗市| 宁津县| 多伦县| 龙胜| 体育| 锡林郭勒盟| 库车县| 尼木县| 林周县| 自贡市| 德州市| 廊坊市| 西安市| 淅川县| 哈巴河县| 安岳县| 扎鲁特旗| 甘洛县| 连州市| 离岛区| 东乡族自治县| 通山县| 合阳县| 建德市| 大名县| 重庆市| 合作市| 公主岭市| 紫阳县| 进贤县| 武威市| 九江市| 冷水江市| 南皮县| 同江市| 岳池县|