PHP通過(guò)session id 實(shí)現(xiàn)session共享和登錄驗(yàn)證的代碼
更新時(shí)間:2012年06月03日 22:19:44 作者:
PHP通過(guò)session id 實(shí)現(xiàn)session共享和登錄驗(yàn)證的代碼,需要的朋友可以參考下
先說(shuō)說(shuō),這個(gè)機(jī)制的用途吧,到現(xiàn)在為止戰(zhàn)地知道這個(gè)機(jī)制有兩個(gè)方面的用途:
首先,多服務(wù)器共享session問(wèn)題,這個(gè)大家應(yīng)該都能夠理解的,當(dāng)一個(gè)網(wǎng)站的用戶量過(guò)大,就會(huì)使用服務(wù)器集群,例如專門有一個(gè)登錄用的服務(wù)器。用戶通過(guò)登錄服務(wù)器登錄之后,登錄服務(wù)器保存了用戶的登錄信息session,而其他受訪問(wèn)的服務(wù)器,例如電影服務(wù)器沒(méi)有這個(gè)session,那么我們就要通過(guò)一個(gè)session的唯一標(biāo)識(shí)來(lái)共享這個(gè)session了——具體session的共享超出了本文的范圍,請(qǐng)自行查閱資料。
第二個(gè)用途就是,驗(yàn)證同一用戶的不同會(huì)話,這個(gè)比較難理解。這樣說(shuō)吧,一個(gè)用戶并非通過(guò)瀏覽器來(lái)請(qǐng)求連接,而是通過(guò)socket或者其它方式來(lái)請(qǐng)求數(shù)據(jù)的時(shí)候,我們首先要對(duì)他進(jìn)行用戶登錄驗(yàn)證,驗(yàn)證成功之后,就下發(fā)一個(gè)sessionid給他,然后他每次請(qǐng)求的時(shí)候就攜帶這個(gè)sessionid,我們通過(guò)這個(gè)sessionid來(lái)判斷session是否已經(jīng)存在,如果存在我們就認(rèn)定用戶已經(jīng)登錄……
對(duì)于第一個(gè)問(wèn)題,我們可以把sessionid保存在數(shù)據(jù)庫(kù)中得以實(shí)現(xiàn),這個(gè)方法比較安全而且應(yīng)用廣泛,但是不是我們討論的范圍哦
第二個(gè)問(wèn)題,其實(shí)已經(jīng)很簡(jiǎn)單了,看一下代碼
首先驗(yàn)證的時(shí)候產(chǎn)生一個(gè)sessionid;
<?php
Session_start();
$sessionId = session_id();//得到sessionid
//將session下發(fā)給客戶端
.........
?>
客戶端攜帶sessionid這個(gè)變量來(lái)請(qǐng)求數(shù)據(jù)
<?php
Session_id(‘$sessionid');//注意這個(gè)時(shí)候session_id()這個(gè)函數(shù)是帶有參數(shù)的
Session_start();//這個(gè)函數(shù)必須在session_id()之后
?>
這個(gè)時(shí)候session已經(jīng)是登錄驗(yàn)證時(shí)候的session了。
注意:在sessionServer.php中如果使用thinkphp等其他自動(dòng)啟動(dòng)session_start();函數(shù)的框架時(shí),必須先調(diào)用session_destory()函數(shù)來(lái)清空session。
首先,多服務(wù)器共享session問(wèn)題,這個(gè)大家應(yīng)該都能夠理解的,當(dāng)一個(gè)網(wǎng)站的用戶量過(guò)大,就會(huì)使用服務(wù)器集群,例如專門有一個(gè)登錄用的服務(wù)器。用戶通過(guò)登錄服務(wù)器登錄之后,登錄服務(wù)器保存了用戶的登錄信息session,而其他受訪問(wèn)的服務(wù)器,例如電影服務(wù)器沒(méi)有這個(gè)session,那么我們就要通過(guò)一個(gè)session的唯一標(biāo)識(shí)來(lái)共享這個(gè)session了——具體session的共享超出了本文的范圍,請(qǐng)自行查閱資料。
第二個(gè)用途就是,驗(yàn)證同一用戶的不同會(huì)話,這個(gè)比較難理解。這樣說(shuō)吧,一個(gè)用戶并非通過(guò)瀏覽器來(lái)請(qǐng)求連接,而是通過(guò)socket或者其它方式來(lái)請(qǐng)求數(shù)據(jù)的時(shí)候,我們首先要對(duì)他進(jìn)行用戶登錄驗(yàn)證,驗(yàn)證成功之后,就下發(fā)一個(gè)sessionid給他,然后他每次請(qǐng)求的時(shí)候就攜帶這個(gè)sessionid,我們通過(guò)這個(gè)sessionid來(lái)判斷session是否已經(jīng)存在,如果存在我們就認(rèn)定用戶已經(jīng)登錄……
對(duì)于第一個(gè)問(wèn)題,我們可以把sessionid保存在數(shù)據(jù)庫(kù)中得以實(shí)現(xiàn),這個(gè)方法比較安全而且應(yīng)用廣泛,但是不是我們討論的范圍哦
第二個(gè)問(wèn)題,其實(shí)已經(jīng)很簡(jiǎn)單了,看一下代碼
首先驗(yàn)證的時(shí)候產(chǎn)生一個(gè)sessionid;
復(fù)制代碼 代碼如下:
<?php
Session_start();
$sessionId = session_id();//得到sessionid
//將session下發(fā)給客戶端
.........
?>
客戶端攜帶sessionid這個(gè)變量來(lái)請(qǐng)求數(shù)據(jù)
復(fù)制代碼 代碼如下:
<?php
Session_id(‘$sessionid');//注意這個(gè)時(shí)候session_id()這個(gè)函數(shù)是帶有參數(shù)的
Session_start();//這個(gè)函數(shù)必須在session_id()之后
?>
這個(gè)時(shí)候session已經(jīng)是登錄驗(yàn)證時(shí)候的session了。
注意:在sessionServer.php中如果使用thinkphp等其他自動(dòng)啟動(dòng)session_start();函數(shù)的框架時(shí),必須先調(diào)用session_destory()函數(shù)來(lái)清空session。
相關(guān)文章
Php header()函數(shù)語(yǔ)法及使用代碼
Php header()函數(shù)語(yǔ)法及使用代碼詳解,這里列出了header的常用常用狀態(tài)碼。2013-11-11
header跳轉(zhuǎn)和include包含問(wèn)題詳解
昨天下班后,同事反映,最近上線的幾款游戲海外注冊(cè)載入不了樣式文件,需要緊急修復(fù)2012-09-09
php實(shí)現(xiàn)自定義中獎(jiǎng)項(xiàng)數(shù)和概率的抽獎(jiǎng)函數(shù)示例
這篇文章主要介紹了php實(shí)現(xiàn)自定義中獎(jiǎng)項(xiàng)數(shù)和概率的抽獎(jiǎng)函數(shù),涉及php字符串、數(shù)組的概率運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
PHP創(chuàng)建word文檔的方法(平臺(tái)無(wú)關(guān))
這篇文章主要介紹了PHP創(chuàng)建word文檔的方法,結(jié)合實(shí)例形式分析了與平臺(tái)無(wú)關(guān)的生成word文檔的方法,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2016-03-03
解析php做推送服務(wù)端實(shí)現(xiàn)ios消息推送
本篇文章是對(duì)php做推送服務(wù)端實(shí)現(xiàn)ios消息推送的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07
如何使用PHP對(duì)象POPO來(lái)優(yōu)化你的代碼
如果您熟悉Java,可能您已經(jīng)知道POJO(普通Java類). 因?yàn)镻OJO這個(gè)詞最早是由Martin Fowler、Rebecca Parsons 和 Josh MacKenzie 于 2000 年在 Java 編程語(yǔ)言上創(chuàng)造的。 POJO 使我們更容易理解類對(duì)象中的數(shù)據(jù)結(jié)構(gòu)類型。本文將詳細(xì)介紹如何使用PHP對(duì)象POPO來(lái)優(yōu)化你的代碼。2021-05-05
PHP實(shí)現(xiàn)截取中文字符串不出現(xiàn)?號(hào)的解決方法
這篇文章主要介紹了PHP實(shí)現(xiàn)截取中文字符串不出現(xiàn)?號(hào)的解決方法,涉及php字符串遍歷及編碼轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2016-12-12

