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

PHP的cookie與session原理及用法詳解

 更新時間:2019年09月27日 10:03:33   作者:阿朗999  
這篇文章主要介紹了PHP的cookie與session原理及用法,結(jié)合實例形式詳細分析了cookie與session的原理及php操作cookie與session的相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了PHP的cookie與session原理及用法。分享給大家供大家參考,具體如下:

產(chǎn)生背景

HTTP協(xié)議是無狀態(tài)的協(xié)議。一旦數(shù)據(jù)交換完畢,客戶端與服務(wù)器端的連接就會關(guān)閉,再次交換數(shù)據(jù)需要建立新的連接。這就意味著服務(wù)器無法從連接上跟蹤會話。于是需要引入一種機制,COOKIE于是就順應(yīng)而生。

Session是另一種記錄客戶狀態(tài)的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務(wù)器上。客戶端瀏覽器訪問服務(wù)器的時候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上。這就是Session。

理解例子

以前大學(xué)的時候,經(jīng)常去大卡司去喝奶茶,每喝一杯,都可以得到一個印花(第一次喝的時候他會給你個積分卡片),集齊6個印花之后,就可以免費獲得一杯奶茶。這樣子,印花的信息是保存在客戶的積分卡上,你如果不懷好意的話,就自己搞幾個神似的印花去騙奶茶喝吧。哈哈,這樣子是不是更符合在客戶端端(cookie)保持狀態(tài)。而拿銀行卡去銀行取錢,我們的卡只需要保存一個卡號,更多的信息是保存在服務(wù)器中(session),這樣也比較符合服務(wù)器端保持狀態(tài)。

具體來說cookie機制采用的是在客戶端保持狀態(tài)的方案,而session機制采用的是在服務(wù)器端保持狀態(tài)的方案。同時我們也看到,由于采用服務(wù)器端保持狀態(tài)的方案在客戶端也需要保存一個標(biāo)識,所以session機制可能需要借助于cookie機制來達到保存標(biāo)識的目的,

簡述cookie

PHP工作原理:PHP通過setcookie函數(shù)進行Cookie的設(shè)置,任何從瀏覽器發(fā)回的Cookie,PHP都會自動的將他存儲在$_COOKIE的全局變量之中,因此我們可以通過$_COOKIE['key']的形式來讀取某個Cookie值。

用途:PHP中的Cookie具有非常廣泛的使用,經(jīng)常用來存儲用戶的登錄信息,購物車等,且在使用會話 Session時通常使用Cookie來存儲會話id來識別用戶,Cookie具備有效期,當(dāng)有效期結(jié)束之后,Cookie會自動的從客戶端刪除。同時為 了進行安全控制,Cookie還可以設(shè)置域跟路徑。

函數(shù)Cookie

PHP設(shè)置Cookie最常用的方法就是使用setcookie函數(shù),setcookie具有7個可選參數(shù),我們常用到的為前5個:

  • name( Cookie名)可以通過$_COOKIE['name'] 進行訪問
  • value(Cookie的值)
  • expire(過期時間)Unix時間戳格式,默認為0,表示瀏覽器關(guān)閉即失效
  • path(有效路徑)如果路徑設(shè)置為'/',則整個網(wǎng)站都有效
  • domain(有效域)默認整個域名都有效,如果設(shè)置了'www.imooc.com',則只在www子域中有效
$value = 'test';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600); //有效期一小時
setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //設(shè)置路徑與域

PHP中還有一個設(shè)置Cookie的函數(shù)setrawcookie,setrawcookie跟setcookie基本一樣,唯一的不同就是value值不會自動的進行urlencode,因此在需要的時候要手動的進行urlencode。

setrawcookie('cookie_name', rawurlencode($value), time()+606024*365);

因為Cookie是通過HTTP標(biāo)頭進行設(shè)置的,所以也可以直接使用header方法進行設(shè)置。

header("Set-Cookie:cookie_name=value");

刪除cookie

PHP設(shè)置Cookie最常用的方法就是使用setcookie函數(shù),setcookie具有7個可選參數(shù),我們常用到的為前5個:

  • name( Cookie名)可以通過$_COOKIE['name'] 進行訪問
  • value(Cookie的值)
  • expire(過期時間)Unix時間戳格式,默認為0,表示瀏覽器關(guān)閉即失效
  • path(有效路徑)如果路徑設(shè)置為'/',則整個網(wǎng)站都有效
  • domain(有效域)默認整個域名都有效,如果設(shè)置了'www.imooc.com',則只在www子域中有效
$value = 'test';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600); //有效期一小時
setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //設(shè)置路徑與域

PHP中還有一個設(shè)置Cookie的函數(shù)setrawcookie,setrawcookie跟setcookie基本一樣,唯一的不同就是value值不會自動的進行urlencode,因此在需要的時候要手動的進行urlencode。

setrawcookie('cookie_name', rawurlencode($value), time()+606024*365);

因為Cookie是通過HTTP標(biāo)頭進行設(shè)置的,所以也可以直接使用header方法進行設(shè)置。

header("Set-Cookie:cookie_name=value");

簡述session

在PHP中使用session非常簡單,先執(zhí)行session_start方法開啟session,然后通過全局變量$_SESSION進行session的讀寫。

session_start();
$_SESSION['test'] = time();
var_dump($_SESSION);

刪除session

在PHP中使用session非常簡單,先執(zhí)行session_start方法開啟session,然后通過全局變量$_SESSION進行session的讀寫。

session_start();
$_SESSION['test'] = time();
var_dump($_SESSION);

session會自動的對要設(shè)置的值進行encode與decode,因此session可以支持任意數(shù)據(jù)類型,包括數(shù)據(jù)與對象等。

session_start();
$_SESSION['ary'] = array('name' => 'jobs');
$_SESSION['obj'] = new stdClass();
var_dump($_SESSION);

默認情況下,session是以文件形式存儲在服務(wù)器上的,因此當(dāng)一個頁面開啟了session之后,會獨占這個session文件,這樣會導(dǎo)致當(dāng)前用戶的其他并發(fā)訪問無法執(zhí)行而等待??梢圆捎镁彺婊蛘邤?shù)據(jù)庫的形式存儲來解決這個問題,這個我們會在一些高級的課程中講到。

session存儲用戶信息

session可以用來存儲多種類型的數(shù)據(jù),因此具有很多的用途,常用來存儲用戶的登錄信息,購物車數(shù)據(jù),或者一些臨時使用的暫存數(shù)據(jù)等。
用戶在登錄成功以后,通??梢詫⒂脩舻男畔⒋鎯υ趕ession中,一般的會單獨的將一些重要的字段單獨存儲,然后所有的用戶信息獨立存儲。

$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['userinfo'] = $userinfo;

一般來說,登錄信息既可以存儲在sessioin中,也可以存儲在cookie中,他們之間的差別在于session可以方便的存取多種數(shù)據(jù)類型, 而cookie只支持字符串類型,同時對于一些安全性比較高的數(shù)據(jù),cookie需要進行格式化與加密存儲,而session存儲在服務(wù)端則安全性較高。

<?php
session_start();//假設(shè)用戶登錄成功獲得了以下用戶數(shù)據(jù)
$userinfo = array(
  'uid' => 10000,
  'name' => 'spark',
  'email' => 'spark@imooc.com',
  'sex' => 'man',
  'age' => '18');
header("content-type:text/html; charset=utf-8");
/* 將用戶信息保存到session中 */
$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['name'] = $userinfo['name'];
$_SESSION['userinfo'] = $userinfo;
//* 將用戶數(shù)據(jù)保存到cookie中的一個簡單方法 */
$secureKey = 'imooc'; //加密密鑰
$str = serialize($userinfo); //將用戶信息序列化//用戶信息加密前
$str = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), $str, MCRYPT_MODE_ECB));//用戶信息加密后//將加密后的用戶數(shù)據(jù)存儲到cookie中
setcookie('userinfo', $str);
//當(dāng)需要使用時進行解密
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), base64_decode($str), MCRYPT_MODE_ECB);
$uinfo = unserialize($str);
echo "解密后的用戶信息:<br>";
print_r($uinfo);

異同

1.cookie將數(shù)據(jù)存儲在客戶端,建立起用戶與服務(wù)器之間的聯(lián)系,session是將用戶的會話數(shù)據(jù)存儲在服務(wù)端
2.cookie相對不是太安全,容易被盜用導(dǎo)致cookie欺騙
3.單個cookie的值最大只能存儲4k  session沒有大小限制
4.每次請求都要進行網(wǎng)絡(luò)傳輸,占用帶寬
5.通過一個session_id進行用戶識別,PHP默認情況下session id是通過cookie來保存的,因此從某種程度上來說,seesion依賴于cookie。但這不是絕對的,session id也可以通過參數(shù)來實現(xiàn),只要能將session id傳遞到服務(wù)端進行識別的機制都可以使用session。

jQuery Cookie 插件

引入

<script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script> 
<script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

設(shè)置刪除

$.cookie('name', 'value', { expires: 7, path: '/' });
$.removeCookie('name'); // => true

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP中cookie用法總結(jié)》、《php緩存技術(shù)總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》及《php字符串(string)用法總結(jié)

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

  • 使用adodb lite解決問題

    使用adodb lite解決問題

    使用adodb lite解決問題...
    2006-12-12
  • discuz目錄文件資料匯總

    discuz目錄文件資料匯總

    這篇文章主要介紹了discuz目錄文件資料匯總,需要的朋友可以參考下
    2014-12-12
  • php格式化電話號碼的方法

    php格式化電話號碼的方法

    這篇文章主要介紹了php格式化電話號碼的方法,涉及php正則表達式的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • PHP n個不重復(fù)的隨機數(shù)生成代碼

    PHP n個不重復(fù)的隨機數(shù)生成代碼

    PHP n個不重復(fù)的隨機數(shù)生成代碼,原理就是將數(shù)組順序隨即打亂 ,然取該數(shù)組中的某一段
    2009-06-06
  • PHP獲取QQ達人QQ信息的方法

    PHP獲取QQ達人QQ信息的方法

    這篇文章主要介紹了PHP獲取QQ達人QQ信息的方法,實例分析了php獲取QQ信息的原理與對應(yīng)的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 詳解php協(xié)程知識點

    詳解php協(xié)程知識點

    本篇文章給大家分享了關(guān)于PHP協(xié)程的相關(guān)知識點內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2018-09-09
  • PHP面向?qū)ο蟪绦蛟O(shè)計之接口的繼承定義與用法詳解

    PHP面向?qū)ο蟪绦蛟O(shè)計之接口的繼承定義與用法詳解

    這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計之接口的繼承定義與用法,結(jié)合實例形式分析了php接口的概念、定義、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-12-12
  • PHP代碼覆蓋率統(tǒng)計詳解

    PHP代碼覆蓋率統(tǒng)計詳解

    這篇文章主要介紹了PHP代碼覆蓋率統(tǒng)計詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • php自動識別文件編碼并轉(zhuǎn)換為UTF-8的方法

    php自動識別文件編碼并轉(zhuǎn)換為UTF-8的方法

    PHP轉(zhuǎn)換文件編碼是一個比較簡單的事情,但是難的是傳遞中文參數(shù)的時候,有時候不知道是什么編碼,結(jié)果造成了亂碼的現(xiàn)象。這篇文章主要介紹了php自動識別編碼并轉(zhuǎn)換為UTF-8的方法,需要的朋友可以參考下
    2014-06-06
  • 給初學(xué)者的30條PHP最佳實踐(荒野無燈)

    給初學(xué)者的30條PHP最佳實踐(荒野無燈)

    給初學(xué)者的30條PHP最佳實踐,需要的朋友可以參考下。
    2011-08-08

最新評論

阿克苏市| 南乐县| 临夏县| 大石桥市| 利辛县| 尉氏县| 固镇县| 三门县| 贡山| 县级市| 吉木萨尔县| 远安县| 和龙市| 开原市| 镇安县| 泰顺县| 奎屯市| 会昌县| 涪陵区| 绥江县| 邯郸县| 西丰县| 宣武区| 新绛县| 如东县| 富裕县| 舟山市| 永福县| 新泰市| 惠东县| 公安县| 榆树市| 新田县| 鱼台县| 合肥市| 图片| 榕江县| 卢龙县| 凯里市| 宁强县| 桑日县|