PHP基礎(談一談Session&Cookie)


 

cookie和sessiond的主要區別

 

(1)、保存位置稍有區別

 

cookie數據存放在客戶的瀏覽器上,服務器端不用保存。session數據放在服務器上,本地內存也有一份。

 

(2)、安全性不同

 

cookie安全性不如session。因為普通cookie保存在本地硬盤上,黑客可以偽造url等方式發起xss攻擊,獲取本地硬盤保存狀態的cookie,進而竊取用戶的敏感信息。

 

session則不同,只有在用戶登錄此網站時發起xss攻擊才能獲取session信息,關閉瀏覽器之后,session即被銷毀,安全性較cookie要好

 

(3).跨域支持上的不同

 

Cookie支持跨域名訪問,例如將domain屬性設置為“.biaodianfu.com”,則以“.biaodianfu.com”為后綴的一切域名均能夠訪問該Cookie。跨域名Cookie如今被普遍用在網絡中,例如Google、Baidu、Sina等。而Session則不會支持跨域名訪問。Session僅在他所在的域名內有效。

 

(4).服務器壓力的不同

 

Session是保管在服務器端的,每個用戶都會產生一個Session。假如並發訪問的用戶十分多,會產生十分多的Session,耗費大量的內存。因而像Google、Baidu、Sina這樣並發訪問量極高的網站,是不太可能運用Session來追蹤客戶會話的。考慮到減輕服務器性能方面,應當使用COOKIE。

 

(5). 存取方式的不同

 

Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二進制數據,需求先進行編碼。Cookie中也不能直接存取Java對象。若要存儲略微復雜的信息,運用Cookie是比擬艱難的。

 

Session中能夠存取任何類型的數據,包括而不限於String、Integer、List、Map等。Session中也能夠直接保管Java Bean乃至任何Java類,對象等,運用起來十分便當。能夠把Session看做是一個Java容器類。

 

(6).   cookie的保存內容大小有限制,單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

(7):session的運行依賴session id ,而session id是存在cookie中的,也就是說如果瀏覽器禁用了cookie,同時session也會失效,(但是可以通過其他方式實現session ,比如在url中傳遞session id)

(8):session 可以放在文件,數據庫,或者是內存中,默認是存儲在文件中,都可以

(9):用戶驗證一般都會用session

 

 

  $_COOKIE    瀏覽器cookie的操作

 

          設置cookie:setcookie(name, value, expire, path, domain);

 

          獲取cookie$_COOKIE["user"];

 

          刪除cookiesetcookie("user", "", time()-3600);//設置過期時間

 

 

  $_SESSION  服務端session的操作

 

          使用session前一定要session_start()啟動session

 

          儲存session$_SESSION["name"]="King";//數組操作

 

          銷毀sessionunset($_SESSION["name"]);//銷毀一個

 

          session_destroy()unset($_SESSION);//銷毀所有的session

 

 

 

Cookie概念

 

      在瀏覽某些 網站 ,這些網站會把 一些數據存在 客戶端 , 用於使用網站 等跟蹤用戶,實現用戶自定義 功能.

 

cookie偽造

你的第三方應用端的cookie被惡意的用戶截取到,然后向服務器端發送,並且通過驗證,他們就會冒充用戶進行登錄,這就是cookie偽造

cookie偽造:

現在更通用的做法是使用session來標識用戶,也就是說我們為每個第三方應用端生成一個唯一的id,然后在服務端存儲這個id所對應的狀態。

這樣cookie里面僅僅保存了這個id,而沒有任何其他的東西。而且這個id往往還有個特性,它是隨機生成,且每次登陸都會產生一個新的。這樣就更降低了信息泄漏的風險。

 

Session的概念

   Session 是存放在服務器端的類似於HashTable結構來存放用戶數據;

   作用:實現網頁之間數據傳遞,是一個存儲在服務器端的對象集合。

   原理:當用戶請求一個Asp.net頁面時,系統將自動創建一個Session;退出應用程序或關閉服務器時,該Session撤銷。系統在創建Session時將為其分配一個長長的字符串標識,以實現對Session進行管理與跟蹤。

 

客戶端禁掉 cookie后session還能用嗎

Cookiesession都是用來實現會話機制的,由於http協議是無狀態的,所以要想跟蹤一個用戶在同一個網站之間不同頁面的狀態,需要有這么一個機制----會話機制。

Cookie:將會話信息的保存到瀏覽器端。Session:將會話信息保存到服務器端。

session默認情況下是基於cookie的,對於session來說,每生成一個sessionid,都會將其發送到瀏覽器端,讓后將其保存到cookie當中。

一般Session是用Session ID來確定當前對話所對應的服務器Session,而Session ID是通過Cookie來傳遞的,禁用Cookie相當於失去了Session ID,也就得不到Session了。

但是可以通過其他方式來存儲sessionID,eg:redis或文件里。

在存儲session的文件中,生成sessionID,通過get傳參的方式將sessionID傳到要實現session共享的頁面,讀取sessionID,從而從session中獲取數據。

 

 

session默認的生存時間

 

php中session過期時間設置   

 

1、修改php配置文件中的session.gc_maxlifetime

 

2、?php
    session_start();
    // 保存一天
    $lifeTime = 24 * 3600;
    setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>

 

3、其實 Session 還提供了一個函數 session_set_cookie_params(); 來設置 Session 的生存期的,該函數必須在 session_start() 函數調用之前調用:
?php
    // 保存一天
    $lifeTime = 24 * 3600;
    session_set_cookie_params($lifeTime);
    session_start();
    $_SESSION["admin"] = true;
?>

 

session_id 和 服務器的session文件的關系

Session_id 和session同時生成,並且session文件是以session_id所命名

 

php在儲存session以什么形式存在

PHP為session的存儲提供了三種方式: 文件/ 內存/ 自定義存儲,默認是使用文件存儲.在訪問量大的網站上采用這種方式就不大合適,因為這樣會導致大量的輸入輸出的冗余.我們可以在php.ini更改配置文件或者php腳本中通過相應的函數來設置session文件的存儲類型來改變session文件的存儲形式

 

               比你優秀的人不可怕,可怕的是比你優秀的人比你更努力

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM