国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

session和cookie會(huì)話技術(shù)總結(jié)

什么是會(huì)話控制出現(xiàn)原因:http是無狀態(tài)協(xié)議的, 每次都是不同的服務(wù)器請(qǐng)求, 無法維護(hù)兩個(gè)請(qǐng)求事務(wù)之間的關(guān)系.會(huì)話控制:能夠在網(wǎng)站中跟蹤一個(gè)變量, 通過對(duì)變量的跟蹤, 就可以使多個(gè)請(qǐng)求事物之間建立聯(lián)系

什么是會(huì)話控制

出現(xiàn)原因:http是無狀態(tài)協(xié)議的, 每次都是不同的服務(wù)器請(qǐng)求, 無法維護(hù)兩個(gè)請(qǐng)求事務(wù)之間的關(guān)系.

會(huì)話控制:能夠在網(wǎng)站中跟蹤一個(gè)變量, 通過對(duì)變量的跟蹤, 就可以使多個(gè)請(qǐng)求事物之間建立聯(lián)系, 根據(jù)授權(quán)和用戶身份顯示不同的內(nèi)容, 不同頁面

cookie:是服務(wù)器設(shè)置在客戶端的文本文件, 保存客戶端的個(gè)人信息.

什么是Cookie:

1.

2.

3. cookie 是在http 協(xié)議下, 服務(wù)器或腳本在客戶端保存維護(hù)信息的一種方式 cookie 是web 服務(wù)器保存在客戶端的一個(gè)很小的文本文件, 保存客戶端的信息, 提高網(wǎng)頁的處理效率, 降低服務(wù)器負(fù)擔(dān) cookie 保存在客戶端, 通常在瀏覽器的cookie 臨時(shí)文件夾中, 可以手動(dòng)的刪除. 如果cookie 太多超過系統(tǒng)的允許范圍, 系統(tǒng)將自動(dòng)刪除

cookie 的工作原理

1. 當(dāng)用戶訪問基于php 技術(shù)的網(wǎng)站時(shí), 在php 中可以使用setcookie()函數(shù)生成一個(gè)cookie, 系統(tǒng)經(jīng)過處理, 將cookie 發(fā)送到客戶端并保存在C:Documents and Setting用戶名Cookies目錄下

2. cookie 是http 標(biāo)頭的一部分, 在它之前不能有任何輸出,空格和換行都不可以

3. 當(dāng)客戶端再次訪問網(wǎng)站時(shí), 瀏覽器會(huì)自動(dòng)把cookie 目錄下與該站點(diǎn)對(duì)應(yīng)的cookie 信息發(fā)送到服務(wù)器, 服務(wù)器將自動(dòng)把客戶端傳來的cookie 轉(zhuǎn)化成php 的變量,.php5中存放在$_COOKIE全局?jǐn)?shù)據(jù)中

4. 接受和處理cookie. 使用$_COOKIE獲取

COOKIE 的參數(shù)設(shè)定 Setcookie(鍵,值,有效期=0,有效路徑=‘’,有效域名=‘’,是否僅安全連接傳輸=false,是否HTTPonly=false)

1、 鍵:設(shè)置cookie 的名字,數(shù)據(jù)是在響應(yīng)階段被傳輸?shù)綖g覽器端的

2、 值:設(shè)置cookie 的值

Tip :增加,修改,刪除,都使用該函數(shù)setcookie()完成!

3、 有效期:默認(rèn)瀏覽器關(guān)閉(會(huì)話周期結(jié)束)時(shí),COOKIE 失效。也成之為:會(huì)話COOKIE (臨時(shí)COOKIE )

允許設(shè)置COOKIE 的有效期,語法上,使用setcookie 的第三個(gè)參數(shù)進(jìn)行設(shè)置,通過unix 時(shí)間戳(從1970年到現(xiàn)在的秒數(shù),PHP 函數(shù)time()來獲取當(dāng)前時(shí)間戳。)來設(shè)置COOKIE 的有效期。

當(dāng)用戶下次訪問您的站點(diǎn)的時(shí)候,瀏覽器會(huì)先檢查您站點(diǎn)的所有cookie, 如果某個(gè)cookie 已經(jīng)過期,瀏覽器不會(huì)把這個(gè)cookie 隨頁面請(qǐng)求一起發(fā)送給服務(wù)器,而是刪除這個(gè)已

,

經(jīng)過期的cookie 。時(shí)間點(diǎn)是從cookie 被創(chuàng)建時(shí)候當(dāng)前時(shí)間開始計(jì)算。 誰來判斷該COOKIE 是否過期?(是否在有效期內(nèi))

瀏覽器 OR 服務(wù)器?

是瀏覽器判斷該COOKIE 是否過期的。

在設(shè)置COOKIE 時(shí),同時(shí)將COOKIE 的有效期,告知(傳輸)到瀏覽器端。

如何刪除COOKIE :

Time()-1: 刪除COOKIE 通用做法,強(qiáng)制設(shè)為過期。

注意: 當(dāng)cookie 被刪除時(shí), 它的值在當(dāng)前頁面仍然有效. 如果要把cookie 設(shè)置成在瀏覽器關(guān)閉后就失效. 那么可以把expiretime 的值設(shè)為0, 或者不設(shè)此值

4、 path 有效路徑(使用較少):默認(rèn)僅在當(dāng)前目錄及其后代目錄有效。使用空字符串表示

默認(rèn)值!通常如果需要設(shè)置,就是將COOKIE 設(shè)置為 / 根目錄下有效,表示整站有效。

5、 有效域(使用頻率較高):某個(gè)域名下設(shè)置的COOKIE ,僅僅可以在當(dāng)前域名下所使用

COOKIE ,支持在一級(jí)域名內(nèi)(所有的二級(jí)域名之間)進(jìn)行COOKIE 數(shù)據(jù)共享。

6、 secure 是否僅安全連接(https )傳輸:

告知瀏覽器,我們所設(shè)置的cookie ,是否僅僅在https 這個(gè)協(xié)議下,才會(huì)被發(fā)送到瀏覽器端! 用 參數(shù) 第六個(gè)完成設(shè)置:默認(rèn)值false ,表示都可以(http 和https )。

7、 HTTPONLY :

所設(shè)置好的COOKIE ,是否僅僅在http 請(qǐng)求時(shí)所使用。

COOKIE 還可以通過瀏覽器端的腳本(javascript )獲取到。

function getCookie(){

alert(document.cookie);

}

如果需要禁止瀏覽器端其他腳本使用該cookie ,則使用第七個(gè)參數(shù)即可,默認(rèn)false ,設(shè)置為true 表示除了http 請(qǐng)求,其它地方(javascript )不可以用

COOKIE 的有效期:

設(shè)置方法如下:

setcookie("cookie_name", "abcd", time() 3600);

解釋:這個(gè)cookie 有3600秒的有效期;

cookie 有效期在退出作用域那一刻開始生效;

重新訪問又有3600秒,設(shè)置cookie 時(shí),不會(huì)考慮之前的是否設(shè)置cookie 和cookie 是否有效,可以認(rèn)為是強(qiáng)制設(shè)置。

如果關(guān)閉瀏覽器重新打開又重新算(當(dāng)然這個(gè)要php.ini 設(shè)置了關(guān)閉瀏覽器立即失效的開關(guān)),其實(shí)就是打開頁面產(chǎn)生cokeie 開始算起,如果你打開頁面產(chǎn)生cokeie 的時(shí)間有1800秒了,假如設(shè)置的3600秒失效,再次刷新頁面就剩1800秒了

PHP 手冊(cè)上關(guān)于setcookie 函數(shù)的expire 參數(shù)有這樣一個(gè)解釋:

If set to 0, or omitted, the cookie will expire at the end of the session (when the browser closes).

如果設(shè)為0 或者忽略該參數(shù), cookie將在session 結(jié)束時(shí)(關(guān)閉瀏覽器時(shí)) 過期

,

COOKIE 的注意事項(xiàng)

1. setcookie()之前不能有任何的輸出, 空白和空格也不行(Setcookie()為頭信息設(shè)置)

2. setcookie()之后在當(dāng)前頁面echo 時(shí)不會(huì)輸出, 必須刷新或到下一個(gè)頁面才會(huì)輸出

3. 不同瀏覽對(duì)cookie 的處理不同, 客戶端可以禁用cookie, 而且對(duì)瀏覽器的數(shù)量有限制. 一個(gè)瀏覽器可以最多創(chuàng)建300個(gè)cookie, 每個(gè)不能超過4kb, 每個(gè)站點(diǎn)最多設(shè)置20個(gè)

4. 避免過度依賴cookie, 因?yàn)榭蛻舳藭?huì)禁止掉cookie

什么是session?

1. session 從用戶訪問頁面開始, 到斷開與網(wǎng)站的連接為止, 形成一個(gè)會(huì)話的生命周期. 在會(huì)話期間, 分配客戶唯一的一個(gè)sessionID, 用來標(biāo)識(shí)當(dāng)前用戶, 與其他用戶進(jìn)行區(qū)分

2. session 會(huì)話時(shí),session 會(huì)分別保存在客戶端和服務(wù)器端的兩個(gè)文件, 對(duì)于客戶端:使用臨時(shí)的cookie 保存(cookie的名稱為PHPSESSID) 或者通過url 字符串的形式傳遞. 服務(wù)器端也以文本的形式保存在指定的session 目錄中

3. session 通過id 接受每一次訪問的請(qǐng)求, 從而識(shí)別當(dāng)前用戶, 跟蹤和保持用戶的具體資料, 以及session 變量, 可在session 中存儲(chǔ)數(shù)字或文字資料. 比如session_name.這些信息都保存在服務(wù)器端

4. sessionID 可以作為會(huì)話信息保存到數(shù)據(jù)庫中, 進(jìn)行session 持久化. 這樣可以跟蹤用戶的登陸次數(shù), 在線與否, 在線時(shí)間

如何銷毀session

1、unset($_SESSION['XXX']):用于刪除單個(gè)session 變量

注意:不要使用unset($_SESSION),此函數(shù)不可用, 會(huì)刪除全局的$_SESSION銷毀

2、$_SESSION=array():刪除多個(gè)session 變量

3、銷毀session_destroy():結(jié)束當(dāng)前的會(huì)話, 并清空會(huì)話中的所有資源. 該函數(shù)不會(huì)unset(釋放) 和當(dāng)前session 相關(guān)的全局變量, 也不會(huì)刪除客戶端的session cookie

4、清空session 值

session_start();

$_SESSION=array();

session 的過期時(shí)間

session 的過期時(shí)間由兩方面決定的;

1存儲(chǔ)在客戶端的$_COOKIE['PHPSESSID']的過期時(shí)間(默認(rèn)cookie 名稱為PHPSESSID, 可通過php.ini 中的session.name 修改。)

2. 存儲(chǔ)在服務(wù)器端的相對(duì)應(yīng)的session 文件(session 文件名和上述cookie 的值一一對(duì)應(yīng)),默認(rèn)為1440秒,即24分鐘

兩者的關(guān)系: 當(dāng)執(zhí)行session_start()的時(shí)候,其實(shí)是做了兩件事:

,

根據(jù)$_COOKIE['PHPSESSID']的值(這是由apache 產(chǎn)生的隨機(jī)字符串,如0lkbd2se458r600m2m7o1r4ic5)來訪問 相對(duì)應(yīng)的 session 文件,這兩者是一 一對(duì)應(yīng)的關(guān)系。當(dāng)然文件里面的值是經(jīng)過序列化的

2,如果客戶端沒有傳來$_COOKIE['PHPSESSID'],就會(huì)有服務(wù)端產(chǎn)生一個(gè)隨機(jī)的$_COOKIE['PHPSESSID']并存儲(chǔ)在客戶端。

需要理解:

1、在session_start()開啟之后,當(dāng)session 數(shù)據(jù)對(duì)應(yīng)的PHPSESSIONID 的cookie 已經(jīng)超時(shí),無法傳回到服務(wù)器端,此時(shí)由于session 開啟,系統(tǒng)會(huì)自動(dòng)再重新分配一個(gè)SESSIONID 標(biāo)識(shí),SESSIONID 默認(rèn)是存儲(chǔ)于瀏覽器端。

2、同時(shí)在session_start開啟之后,如果之前有存儲(chǔ)過session ,并且沒有過期,則會(huì)獲取到已經(jīng)存好的session ,如果沒有存儲(chǔ)過session ,則session 機(jī)制默認(rèn)也會(huì)自動(dòng)分配一個(gè)SESSIONID 給瀏覽器,同時(shí)在服務(wù)器端生成對(duì)應(yīng)的文件,此時(shí)的session 是一個(gè)過期的會(huì)話 如何設(shè)置 session 數(shù)據(jù)的屬性?

設(shè)置COOKIE 中session-ID 這個(gè)COOKIE 變量屬性即可!

方案一,配置 php.ini

方案二,在腳本中,開啟session 之前使用函數(shù)進(jìn)行配置

ini_set('session.cookie_lifetime','3600');

ini_set('sesssion.cookie_domain',' .baidu.com'); @session_start();

采用下面的函數(shù)進(jìn)行設(shè)置:

Session_set_cookie_params(有效期,有效路徑,有效域,是否僅安全連接傳輸,是否HTTPONLY) 實(shí)際環(huán)境中,很少改session 的有效期。經(jīng)常改有效域名。

session_set_cookie_params(0,'/', '.baidu.com');

Session 數(shù)據(jù)區(qū)操作:

重寫session 的存儲(chǔ)機(jī)制:

Session 數(shù)據(jù)區(qū)默認(rèn)以 文件的形式存儲(chǔ)與服務(wù)器操作系統(tǒng)臨時(shí)目錄中!

當(dāng) session 數(shù)據(jù)區(qū)過多時(shí),文件形式的存儲(chǔ),操作速度變慢,磁盤的讀寫開銷很大 重寫session 入數(shù)據(jù)庫:

共6個(gè)函數(shù)

Session_set_save_handler(開始函數(shù),結(jié)束函數(shù),讀函數(shù),寫函數(shù),刪除函數(shù),GC 函數(shù)); 告知session 機(jī)制,在需要讀寫時(shí),使用用戶自定義的讀寫函數(shù)完成!

這個(gè)函數(shù)僅僅是設(shè)置告知,不是調(diào)用,以上6個(gè)函數(shù),在session 機(jī)制運(yùn)行到某個(gè)時(shí)間點(diǎn)時(shí), 才會(huì)被調(diào)用!

垃圾回收操作: sessGC()

垃圾:服務(wù)器上過時(shí)的session 數(shù)據(jù)區(qū)。

垃圾如何判定?

如果一個(gè)session 數(shù)據(jù)區(qū)已經(jīng)超過多久沒有使用(最后一次寫操作)了,就是被視為垃圾數(shù)據(jù)。

該時(shí)間臨界點(diǎn):默認(rèn)1440s ??梢员慌渲茫簊ession.gc_maxlifetime = 1440

,

判斷過期條件:Last_write < 當(dāng)前時(shí)間-1440

垃圾如何刪除?

在 session_start()過程中,開啟session 機(jī)制過程中:有幾率地執(zhí)行 垃圾回收操作。 一旦執(zhí)行,就會(huì)刪除所有的過期的垃圾數(shù)據(jù)區(qū)。

默認(rèn)的概率為1/1000。

可以設(shè)置該幾率:

可能性:Session.gc_probability

基數(shù)(除數(shù)):Session.gc_divisor

建議在腳本周期調(diào)整,使用函數(shù)ini_set(),在開啟session 機(jī)制前完成

實(shí)現(xiàn) sessGC():PHP 的session 機(jī)制將 最大有效期作為參數(shù),傳遞過來! 語法細(xì)節(jié):

要注意先設(shè)置再開啟session 機(jī)制

PHP 配置項(xiàng):session.save_handler改為 user : 表示用戶自定義!

會(huì)話技術(shù)總結(jié):

Session.save_handler 存儲(chǔ)處理器: files|user

Session.save_path 存儲(chǔ)地址。

Session.cookie_XXX (lifetime ,path ,domain ,secure ,httponly )存儲(chǔ)session-ID 這個(gè)COOKIE 變量的屬性

Session.gc_maxlifetime

Session.gc_probability

Session.gc_divisor

Session ,COOKIE 聯(lián)系和區(qū)別?

聯(lián)系

都是會(huì)話技術(shù)。

Session 基于COOKIE ,session-ID 存儲(chǔ)于COOKIE 中!

區(qū)別:

Cookie session

存儲(chǔ)位置 瀏覽器端 服務(wù)器端

安全性 低 高

大小限制 有 沒有

數(shù)據(jù)類型 字符串 除資源外的其它全部

有效期使用 長(zhǎng)時(shí)間存 幾乎不做持久化

Session 如何持久化?[理論]

1、Session-ID 要持久化:

,

2、session_set_cookie_params(3600);

服務(wù)器session 數(shù)據(jù)區(qū)有效期修改:ini_set(‘session.gc_maxlifetime’, 3600);

瀏覽器禁用COOKIE ,session 是否可用?[理論]

COOKIE 被禁用,session-Id 不能存儲(chǔ)和傳輸。

不可用!

理論上的解決方案:

通過 URL , 或者 POST 數(shù)據(jù)數(shù)據(jù)向服務(wù)器端,每次傳輸session-ID !

例如下面的配置:php.ini

Session 是否僅僅是用COOKIE 完成傳輸session-ID :

session.use_only_cookie = 1 開啟(在session_start之前)

是否通過其他方式自動(dòng)傳輸session-ID :

session.use_trans_sid = 0 開啟

然后通過表單的隱藏域向服務(wù)器端,每次傳輸session-ID !即可

session 和cookie 的額外的一些理解:

1. 由于HTTP 協(xié)議是無狀態(tài)的協(xié)議,所以服務(wù)端需要記錄用戶的狀態(tài)時(shí),就需要用某種機(jī)制來識(shí)具體的用戶,這個(gè)機(jī)制就是Session. 典型的場(chǎng)景比如購物車,當(dāng)你點(diǎn)擊下單按鈕時(shí),由于HTTP 協(xié)議無狀態(tài),所以并不知道是哪個(gè)用戶操作的,所以服務(wù)端要為特定的用戶創(chuàng)建了特定的Session ,用用于標(biāo)識(shí)這個(gè)用戶,并且跟蹤用戶,這樣才知道購物車?yán)锩嬗袔妆緯?。這個(gè)Session 是保存在服務(wù)端的,有一個(gè)唯一標(biāo)識(shí)。在服務(wù)端保存Session 的方法很多,內(nèi)存、數(shù)據(jù)庫、文件都有。集群的時(shí)候也要考慮Session 的轉(zhuǎn)移,在大型的網(wǎng)站,一般會(huì)有專門的Session 服務(wù)器集群,用來保存用戶會(huì)話,這個(gè)時(shí)候 Session 信息都是放在內(nèi)存的,使用一些緩存服務(wù)比如Memcached 之類的來放 Session 。

2. 思考一下服務(wù)端如何識(shí)別特定的客戶?這個(gè)時(shí)候Cookie 就登場(chǎng)了。每次HTTP 請(qǐng)求的時(shí)候,客戶端都會(huì)發(fā)送相應(yīng)的Cookie 信息到服務(wù)端。實(shí)際上大多數(shù)的應(yīng)用都是用 Cookie 來實(shí)現(xiàn)Session 跟蹤的,第一次創(chuàng)建Session 的時(shí)候,服務(wù)端會(huì)在HTTP 協(xié)議中告訴客戶端,需要在 Cookie 里面記錄一個(gè)Session ID,以后每次請(qǐng)求把這個(gè)會(huì)話ID 發(fā)送到服務(wù)器,我就知道你是誰了。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?一般這種情況下,會(huì)使用一種叫做URL 重寫的技術(shù)來進(jìn)行會(huì)話跟蹤,即每次HTTP 交互,URL 后面都會(huì)被附加上一個(gè)諸如 sid=xxxxx 這樣的參數(shù),服務(wù)端據(jù)此來識(shí)別用戶。

3. Cookie其實(shí)還可以用在一些方便用戶的場(chǎng)景下,設(shè)想你某次登陸過一個(gè)網(wǎng)站,下次登錄的時(shí)候不想再次輸入賬號(hào)了,怎么辦?這個(gè)信息可以寫到Cookie 里面,訪問網(wǎng)站的時(shí)候,網(wǎng)站頁面的腳本可以讀取這個(gè)信息,就自動(dòng)幫你把用戶名給填了,能夠方便一下用戶。這也是Cookie 名稱的由來,給用戶的一點(diǎn)甜頭。

所以,總結(jié)一下:

Session 是在服務(wù)端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來跟蹤用戶的狀態(tài),這個(gè)數(shù)據(jù)可以保存在集群、數(shù)據(jù)庫、文件中;

Cookie 是客戶端保存用戶信息的一種機(jī)制,用來記錄用戶的一些信息,也是實(shí)現(xiàn)Session 的一種方式。

標(biāo)簽: