电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:129日期:2022-09-08 14:22:38

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

1.在php中如何操作session:

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

$_SESSION  //使用預定義全局變量操作數據

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

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

2.session實現與工作原理

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

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

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

由服務器為它生成的session_id.

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

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

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

較好理解的描述:

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

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

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

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

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

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

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

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

來選擇保存session的方式。

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

一個簡單的memcache配置:

session.save_handler = memcache

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

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

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

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

3.實例問題

現有系統A,B; 假設A系統是可以獨立運行的web系統,即可以和瀏覽器直接處理session, B系統是基于mobile的,需要調用A系統的功能接口,

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

這里提供的方案是使用PHP實現

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

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

這樣B系統就能安全的調用A

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: PHP
相關文章:
主站蜘蛛池模板: 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 电脑刺绣_绣花厂家_绣花章仔_织唛厂家-[源欣刺绣]潮牌刺绣打版定制绣花加工厂家 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 金属管浮子流量计_金属转子流量计厂家-淮安润中仪表科技有限公司 | 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 东莞市超赞电子科技有限公司 全系列直插/贴片铝电解电容,电解电容,电容器 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 真空乳化机-灌装封尾机-首页-温州精灌| 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 方源木业官网-四川木门-全国木门专业品牌 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 货车视频监控,油管家,货车油管家-淄博世纪锐行电子科技 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 字典-新华字典-在线字典查字-字典趣 | 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 亚洲工业智能制造领域专业门户网站 - 亚洲自动化与机器人网 | 国际学校_国际学校哪个好_国际课程学校-国际学校择校网 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 北京律师咨询_知名专业北京律师事务所_免费法律咨询 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 |