php關於Session和cookie總結

什麼是 Cookie?

cookie 經常使用於識別用戶。cookie 是服務器留在用戶計算機中的小文件。每當相同的計算機經過瀏覽器請求頁面時,它同時會發送 cookie。經過 PHP,可以建立並取回 cookie 的值。php

1、關於建立cookiehtml

setcookie(name, value, expire, path, domain);

例子:算法

下面的例子會設置一個cookie鍵值對,過時時間爲1小時,服務器會將該cookie發送到客戶端。(在發送 cookie 時,cookie 的值會自動進行 URL 編碼,在取回時進行自動解碼)數據庫

<?php 
setcookie("user", "Alex Porter", time()+3600);
?>

<html>
<body>

</body>
</html>

2、服務器端如何取回cookie瀏覽器

PHP 的 $_COOKIE 超全局變量用於取回 cookie 的值。安全

在下面的例子中,咱們取回了名爲 "user" 的 cookie 的值,並把它顯示在了頁面上:服務器

<?php
// Print a cookie
echo $_COOKIE["user"];

// A way to view all cookies
print_r($_COOKIE);
?>

在下面的例子中,咱們使用 isset() 函數來確認是否已設置了 cookie: cookie

<html>
<body>

<?php
if (isset($_COOKIE["user"]))
  //確認是登陸態,繼續操做
else
  //重定向到登陸界面
?>

</body>
</html>

因爲使用了setcookie()設置cookie信息,瀏覽器端之後每次向該域內的php腳本發送請求時,都會自動在請求頭上加上cookie字段。上面這種方法可用於防止用戶繞過登陸界面,直接訪問內部頁面。(所以setcookie()通常應該在登陸界面驗證成功後使用),有了cookie驗證以後,才能夠維護已登陸用戶的狀態。session

 

3、如何刪除cookiedom

當刪除 cookie 時,您應當使過時日期變動爲過去的時間點。

刪除的例子:

<?php 
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>

4、cookie總結

Cookie在項目實戰中都有哪些應用:

1>記住用戶名密碼

2>在cookie的生命週期以內,維護用戶的登陸狀態

 

Cookie的優缺點

1>優勢:a.不須要服務器資源空間 b.持久時間更長

2>缺點:a.客戶端大小受限制 b.用戶禁用Cookie那麼就廢用了 c.不安全

(6)Cookie和Session的區別和聯繫

1>聯繫:Cookie能夠在客戶端爲session保存惟一標識(sessionID)

2>區別:Cookie機制採用的是在客戶端(瀏覽器)保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案

 

 

關於session

1、session 變量

當您運行一個應用程序時,您會打開它,作些更改,而後關閉它。這很像一次會話。計算機清楚你是誰。它知道你什麼時候啓動應用程序,並在什麼時候終止。可是在因特網上,存在一個問題:服務器不知道你是誰以及你作什麼,這是因爲 HTTP 地址不能維持狀態。

經過在服務器上存儲用戶信息以便隨後使用,PHP session 解決了這個問題(好比用戶名稱、購買商品等)。不過,會話信息是臨時的,在用戶離開網站後將被刪除。若是您須要永久儲存信息,能夠把數據存儲在數據庫中。

Session 的工做機制是:爲每一個訪問者建立一個惟一的 id (sessionID),並基於這個 sessionID 來存儲變量。sessionID 存儲在 cookie 中,亦或經過 URL 進行傳導。

 

2、開始啓動會話

<?php session_start(); ?>

<html>
<body>

</body>
</html>

session_start()作了哪些初始化工做?

上面的代碼首先會嘗試在服務器端讀取客戶端發來的請求報文中名爲sessionID的cookie值。若沒有讀取到,說明用戶首次登陸,會向服務器註冊用戶的會話,同時會爲用戶會話分配一個 sessionID。而且將名爲sessionID的cookie發送給客戶端。 

關於sessionID的產生:

PHP在使用默認的 session.save_handler = files 方式時,PHPSESSIONID的生產算法原理以下:

hash_func = md5 / sha1 #可由php.ini配置
PHPSESSIONID = hash_func(客戶端IP + 當前時間(秒)+ 當前時間(微妙)+ PHP自帶的隨機數生產器)

從以上hash_func(*)中的數據採樣值的內容分析,多個用戶在同一臺服務器時所生產的PHPSESSIONID重複的機率極低(至少爲百萬份之一)

如何獲取sessionID的值?

session_id() 能夠用來獲取/設置 當前會話 ID。相似cookie機制,咱們也能夠經過檢查sessionID的值是否存在,來驗證用戶是不是已登陸狀態。

<?php
  session_start();
  echo session_id();
  // 輸出 08nr1fav9jqs2pdi5qlpsmd247
?>

3、存儲session變量

存儲和取回 session 變量的正確方法是使用 PHP $_SESSION 變量:

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>

<html>
<body>

<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>

</body>
</html>

 

4、銷燬session

unset() 函數用於釋放指定的 session 變量:

<?php
unset($_SESSION['views']);
?>

也能夠經過 session_destroy() 函數完全終結 session: (session_destroy() 將重置 session,您將失去全部已存儲的 session 數據。)

<?php
session_destroy();
?>

 

5、session總結

Session項目實戰中都有哪些應用:

1>記錄用戶登錄信息,全局使用

2>製做驗證碼,驗證對比操做

3>將session保存到數據庫能夠實現:a.控制一個賬號只能一我的登陸

 

Session的優缺點:

1>session的優勢:惟一性、方便調用、不會過多佔用資源,是存儲在服務器的一組臨時數據。通常狀況下,咱們在作用戶登陸時,會將用戶數據存入session。這樣,在任何頁面均可以方便調用,並且 每一個客戶端會產生惟一的session_id,不會混餚。而且在關閉瀏覽器後,服務器會有session回收機制,自動刪除過時session

2>缺點:在客戶端是以cookie方式保存的,禁用cookie就沒用了。

 

Session和Cookie的聯繫以及區別:

1>聯繫:Session在客戶端也須要保存一個標識,因此就要藉助Cookie,session是經過cookie來工做的session和cookie之間是經過$_COOKIE['PHPSESSID']來聯繫的,經過$_COOKIE['PHPSESSID']能夠知道session的id,從而獲取到其餘的信息。

2>區別:Cookie機制採用的是在客戶端(瀏覽器)保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案

相關文章
相關標籤/搜索