session&cookie

cookie和sessiond的主要區別php

 

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

 

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).服務器壓力的不一樣cookie

 

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"];

 

          刪除cookie:setcookie("user", "", time()-3600);//設置過時時間

 

 

  $_SESSION  服務端session的操做

 

          使用session前必定要session_start()啓動session

 

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

 

          銷燬session:unset($_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還能用嗎

Cookie和session都是用來實現會話機制的,因爲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過時時間設置   

 

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

 

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

 

三、其實 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文件的存儲形式

相關文章
相關標籤/搜索