cookie與session(略談)

 

cookie

儲存在用戶本地終端上的數據php

 

 

Cookie,有時也用其複數形式 Cookies,指某些網站爲了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據(一般通過加密)。定義於 RFC2109 和 2965 中的都已廢棄,最新取代的規範是 RFC6265。(能夠叫作瀏覽器緩存)
Cookie 是在 HTTP 協議下,服務器或腳本能夠維護客戶工做站上信息的一種方式。Cookie 是由 Web 服務器保存在用戶瀏覽器(客戶端)上的小文本文件,它能夠包含有關用戶的信息。不管什麼時候用戶連接到服務器,Web 站點均可以訪問 Cookie 信息。
目前有些 Cookie 是臨時的,有些則是持續的。臨時的 Cookie 只在瀏覽器上保存一段規定的時間,一旦超過規定的時間,該 Cookie 就會被系統清除
持續的 Cookie 則保存在用戶的 Cookie 文件中,下一次用戶返回時,仍然能夠對它進行調用。在 Cookie 文件中保存 Cookie,有些用戶擔憂 Cookie 中的用戶信息被一些別有用心的人竊取,而形成必定的損害。其實,網站之外的用戶沒法跨過網站來得到 Cookie 信息。若是由於這種擔憂而屏蔽 Cookie,確定會所以拒絕訪問許多站點頁面。由於,當今有許多 Web 站點開發人員使用 Cookie 技術,例如 Session 對象的使用就離不開 Cookie 的支持[。
 
如下是一條cookie信息

 

 "_octo=GH1.1.969433396.1497770397; _ga=GA1.2.1764394916.1497770397; _gat=1; tz=Asia%2FShanghai" html

cookie存在於瀏覽器當中的jquery

服務器返回的響應頭裏面的信息:cookie的格式,鍵值對json

 Set-Cookie:PHPSESSID=ot684bvd4n6mlpmsg2pbsubb14; expires=Mon, 19-Jun-2017 07:24:17 GMT; path=/ 瀏覽器

 

cookie 是存在於客戶端瀏覽器的,是能夠設置的,也能夠獲取的 document.cookie = ""; document.cookie 緩存

同域名下面的cookie是共享的  studyit.com/login  studyit.com/index服務器

根目錄下面的cookie信息,是能夠被全部的子目錄訪問的,可是子目錄的cookie信息,是不能被父級訪問到的cookie

相似 於做用域session

不一樣域名之間的cookie信息不能互相訪問,不共享併發

cookie是能夠設置過時時間的,默認的生命週期就是頁面關閉的時候 

<script> document.cookie="name=zhangsan;age=20;";//雖然用分號隔開了,可是內容不能所有獲取到
 document.cookie="name=zhangsan;"; document.cookie="age=20;"; //這樣寫是不會將前面的給覆蓋掉,可是大小是有限制的,大約在4k
    //由於瀏覽器每次發送請求的時候都會默認攜帶cookie,若是cookie的數據太大了會影響傳輸速度和訪問效率
 console.log(document.cookie); // 由於cookie就是一個字符串,設置的時候,沒有問題,可是獲取裏面的某相cookie值的時候,很是的不方便,所以可使用 jquery.cookie這個插件來完成

</script>

  

  • Session

 

Session直接翻譯成中文比較困難,通常都譯成時域。在計算機專業術語中,Session是指一個終端用戶與交互系統進行通訊的時間間隔,一般指從註冊進入系統到註銷退出系統之間所通過的時間。以及若是須要的話,可能還有必定的操做空間。

 

具體到Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到關閉瀏覽器所通過的這段時間,也就是用戶瀏覽這個網站所花費的時間。所以從上述的定義中咱們能夠看到,Session其實是一個特定的時間概念。

 

須要注意的是,一個Session的概念須要包括特定的客戶端,特定的服務器端以及不中斷的操做時間。A用戶和C服務器創建鏈接時所處的Session同B用戶和C服務器創建鏈接時所處的Session是兩個不一樣的Session。

Session是存在服務器端的,至關於有一個session存區,每當瀏覽器發送請求的時候,若是不是第一次請求的話,都會攜帶以前的cookie信息到服務器端,這個時候,就能夠和session存儲區的sessionid進行匹配,若是匹配成功,則證實是已經登陸的用戶,若是沒有,則證實沒有登陸過,或是沒有訪問

Session也是有過時時間的,默認是20分鐘。這個20分鐘是一個滑動時間

 

session的工做原理

 

(1)當一個session第一次被啓用時,一個惟一的標識被存儲於本地的cookie中。

 

(2)首先使用session_start()函數,PHP從session倉庫中加載已經存儲的session變量。

 

(3)當執行PHP腳本時,經過使用session_register()函數註冊session變量。

 

(4)當PHP腳本執行結束時,未被銷燬的session變量會被自動保存在本地必定路徑下的session庫中,這個路徑能夠經過php.ini文件中的session.save_path指定,下次瀏覽網頁時能夠加載使用。

 

  • 利用cookie實現登錄

由於只能請求過服務器以後,纔會由服務器給瀏覽器發送一條session字符串,存儲到瀏覽器的cookie當中

第二次請求的時候,瀏覽器就會攜帶着存儲到cookie中的信息一併發送給服務器

服務器接受請求,並得到cookie中的信息,而後和session存儲區的數據進行匹配,若是匹配成功,則證實以前已經登錄過

則能夠進行後續的跳轉,不然跳轉到登錄頁面

php方式測試cookie

 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<p>使用PHP的方式測試...</p>
</body>
</html>
<script>
  var xhr = new XMLHttpRequest(); xhr.open('get','setCookie.php'); xhr.send(); </script>

 

setCookie.php:

 

<?php header("Content-type:text/html;charset=utf-8"); // echo '請求成功了';
        setcookie('gender','mmmm'); // cookie也是能夠在服務器端進行設置的,是能夠跟隨響應報文,返回到瀏覽器端,存儲在瀏覽器的cookie當中 // 當再次再來訪問的時候,會獲取到帶來的cookie信息,和服務器的session存儲區內的信息進行匹配,若是匹配成功則能夠進行其它的訪問操做 // var_dump($_COOKIE); // $_COOKIE能夠接收發送過來的全部的cookie信息
   echo json_encode($_COOKIE); // json_encode 是將 $_COOKIE中的內容轉換成對象形式的字符串

?>

 

session與cookie 小結:

  • Cookie:
  1. cookie是存在於瀏覽器端的
  2. 每次瀏覽器發送請求都會攜帶cookie信息,若是是第一次請求通常是沒有cookie
  3. cookie是能夠同域名下面的頁面共享的,不一樣域名下面的cookie不共享
  4. 父級目錄下面的cookie,子級目錄是能夠獲取到的,可是子級下面的cookie,父級獲取不到
  5. cookie是有過時時間的,通常默認時間是頁面關閉,時間是能夠本身設置的
  6. cookie的格式是一個字符串,是一個鍵值對形式
  7. cookie是有大小限制的,通常是4k,若是數據太大的話,會影響傳遞速度或是效率
  8. Document.cockie能夠用來設置或是獲取cookie信息
  • Session:
  1. session存儲於服務器端,依賴於cookie
  2. 服務器端至關於有一個session存儲區
  3. session沒有大小限制

使用jQuery.cookie.js這個插件來設置cookie

首先這個插件是依賴於jQuery的,所以使用的時候必定要先引入jQuery文件,而後再使用插件

$.cookie("name","zhangsan");

$.cookie(),這個方法獲取的是一個對象,所以存取cookie就變的很是方便

  <title>Title</title>
  <script src="views/public/assets/jquery/jquery.js"></script>
  <script src="views/public/assets/jquery-cookie/jquery.cookie.js"></script>
  <script>
// $.cookie('name','lisi'); // console.log($.cookie()); // console.log($.cookie('sex')); //使用這種方式來獲取cookie的值就方便多了
 $.cookie('name','zhangsan',{path:'/',expires:new Date('2017-06-20 18:00:00')}); </script>
</head>
<body>
<p>這是使用jquery.cookie.js在設置cookie了...</p>
</body>
相關文章
相關標籤/搜索