《PHP教程:php及codeigniter使用session-cookie的方法(詳解)》要點(diǎn):
本文介紹了PHP教程:php及codeigniter使用session-cookie的方法(詳解),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
1、讀寫cookiePHP實(shí)例
<1>原生PHP實(shí)例
setcookie('name','value',time)
設(shè)置失敗,沒(méi)有正常寫入瀏覽器,測(cè)試失敗,原因未知PHP實(shí)例
<2>CI框架PHP實(shí)例
$this->input->set_cookie("views","test10",1000); echo $_COOKIE["views"];//此方法獲取值時(shí),如果值不存在會(huì)報(bào)錯(cuò),當(dāng)然可以先用isset($_COOKIE["views"])判斷一下
<3>通過(guò)helperPHP實(shí)例
$this->load->helper('cookie');//這行放在view也是可以的,隨便 set_cookie('views','test10',1000); echo get_cookie('views');//此方法獲取值如果獲取不到,會(huì)返回空,不會(huì)報(bào)錯(cuò)
2、讀寫sessionPHP實(shí)例
<1>原生sessionPHP實(shí)例
啟動(dòng):PHP實(shí)例
<?php session_start(); ?>
賦值:PHP實(shí)例
$_SESSION['views'] = "test20";
取值:
PHP實(shí)例
echo "Session:". $_SESSION['views'];
存續(xù)時(shí)間:PHP實(shí)例
會(huì)話.當(dāng)瀏覽器關(guān)閉,cookie里面的phpsession就會(huì)清空,下次打開(kāi)會(huì)重新生成一個(gè)PHP實(shí)例
雖然服務(wù)器還保存著這個(gè)session.session的過(guò)期時(shí)間在php.ini里設(shè)置,參見(jiàn)另一篇文章php(codeigniter)安全性注意事項(xiàng)PHP實(shí)例
<2>CI框架sessionPHP實(shí)例
啟動(dòng):PHP實(shí)例
$this->load->library('session');//load必須在controller完成,當(dāng)要使用session必須先load賦值: $this->session->views = "test11";
取值:
PHP實(shí)例
echo "Session:". $_SESSION['views'];
存續(xù)時(shí)間:PHP實(shí)例
客戶端有2個(gè)小時(shí)的存續(xù)時(shí)間,當(dāng)服務(wù)器的session被刪除,因?yàn)榭蛻舳说膕ession id還是有效的,所以當(dāng)再次打開(kāi)的時(shí)候,服務(wù)端會(huì)再創(chuàng)建一個(gè)跟客戶端session id相同的session,當(dāng)然是創(chuàng)建新id還是老id并不重要,因?yàn)橹皇莍d同名,里面是沒(méi)有數(shù)據(jù)的PHP實(shí)例
<3>區(qū)別PHP實(shí)例
>兩個(gè)session名稱是不同的,一個(gè)叫phpsession,一個(gè)叫ci_sessionPHP實(shí)例
>只能啟動(dòng)一個(gè),不能兩個(gè)都啟動(dòng)PHP實(shí)例
>取值是相同的PHP實(shí)例
>兩個(gè)千萬(wàn)不要混用,應(yīng)該全面放棄原生的方式PHP實(shí)例
>原生phpsession的是隨便訪問(wèn)的,ci_session是httponly的,這就意味著原生的session可能會(huì)被通過(guò)xxs攻擊,通過(guò)js獲取到cookiePHP實(shí)例
<4>例外情況PHP實(shí)例
有一種情況是這樣的:PHP實(shí)例
當(dāng)此時(shí)已經(jīng)存在ci_session,因?yàn)檫@個(gè)ci_是持久化的PHP實(shí)例
//session_start();//沒(méi)有啟動(dòng)原生的session //$this->load->library('session');//沒(méi)有啟動(dòng)ci的session $_SESSION['views'] = "test23";//直接用原生的方式進(jìn)行賦值 echo "Session:". $_SESSION['views'];//可以正常取值出來(lái)"test23"
通過(guò)查看cookie,發(fā)現(xiàn)沒(méi)有原生session存在,只能是走的ci session,那么在服務(wù)器的session里找到這個(gè)文件,發(fā)現(xiàn)這個(gè)值沒(méi)有寫進(jìn)去 如果有聲明session_start(),他就會(huì)走原生的模式,會(huì)重新創(chuàng)建一個(gè)phpsession,并且值會(huì)寫進(jìn)去PHP實(shí)例
如果什么都沒(méi)聲明,也沒(méi)有賦值,直接取值,那么會(huì)報(bào)錯(cuò),因?yàn)橐褂胏i_session必須要load,我們沒(méi)有l(wèi)oad就會(huì)報(bào)錯(cuò),所以證明了,在用原生的方式進(jìn)行賦值的時(shí)候,他相當(dāng)于啟動(dòng)了session,啟用了ci_session,但他又沒(méi)有權(quán)限寫入,這可以說(shuō)是一個(gè)bugPHP實(shí)例
<5>session如何運(yùn)作PHP實(shí)例
cookie的運(yùn)作比較容易理解,就是寫入到用戶cookie,寫什么讀出來(lái)就是什么.只要是本站的cookie,就可以通過(guò)鍵值讀出來(lái).PHP實(shí)例
session的值是存在服務(wù)器的,但是怎么知道這個(gè)值是哪個(gè)用戶的?通過(guò)在用戶cookie里存入那個(gè)session的文件名,而保存的值放在服務(wù)器同名的文件里面.說(shuō)的盜取cookie指的就是盜取這個(gè),重要的信息存在服務(wù)器上,但是這個(gè)被盜了也完蛋.所以,也不能相信cookie里存的這個(gè)session-key,應(yīng)該做一個(gè)鑒權(quán).PHP實(shí)例
注意,寫入session的同時(shí),寫session-key到用戶的cookie里這個(gè)是自動(dòng)完成的,這個(gè)存續(xù)時(shí)間應(yīng)該是在服務(wù)器的php.ini里面配置.
PHP實(shí)例
以上這篇php及codeigniter使用session-cookie的方法(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持維易PHP.PHP實(shí)例
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/993.html