首頁  >  文章  >  後端開發  >  php會話控制session、cookie介紹

php會話控制session、cookie介紹

小云云
小云云原創
2018-03-02 09:47:031629瀏覽

一、cookie

1>cookie介紹

Cookie是儲存在客戶端瀏覽器中的數據,可以透過Cookie來追蹤與儲存使用者資料。一般情況下,Cookie會透過HTTPheaders從服務端返回客戶端。多數web程序都支援對Cookie的操作,因為Cookie是存在於HTTP的標頭之中。
 在PHP透過setcookie函數對Cookie進行設置,任何從瀏覽器發回的Cookie,PHP都會自動的將他儲存在

_COOKIE[‘key’]的形式來讀取某個Cookie值。
 使用會話Session時通常使用Cookie來儲存會話id來識別用戶,Cookie具備有效期,當有效期結束之後,Cookie會自動的從客戶端刪除。

2>設定cookie
setcookie()
 意義:用於設定cookie,在setcookie()函數中一個有7個參數(常用的參數只有5個)。
 語法:setcookie(name,value,expire,path,domain,secure,httponly)
 傳回值:如果在呼叫此函數之前存在輸出,則 setcookie()將失敗並傳回FALSE。如果 setcookie()成功運行,它將返回TRUE。這並不表示使用者是否接受了Cookie。

參數:
 name:
  Cookie的名稱,透過$_COOKIE[‘name’]存取。
 value:
  Cookie的值
 expire:
  Cookie到期的時間。這是一個Unix時間戳,單位是秒。你可以用time()函數加上你希望它過期之前的秒數來設定它。或者你可以使用mktime()。如果設定為0或省略,則cookie將在會話結束時過期(當瀏覽器關閉時),預設為0。
 path:
(有效路徑)如果路徑設定為'/',則整個網站都有效,如果設定為'/ foo /',則cookie將僅在/foo/目錄和所有子目錄(如/ foo / bar / of)中可用domain。
 domain:
  (cookie可用的網域)預設整個網域都有效,要使cookie可用於整個網域(包括它的所有子網域),只需將該值設為網域名稱(本例中為’example.com’)。
 secure:
  表示該cookie只能透過客戶端的安全HTTPS連線進行傳輸。設定TRUE時,只有存在安全連線時才會設定cookie。在伺服器端,程式設計師只能在安全連線上傳送這種cookie(eg:相對於

value, time()+3600, “path/”, “baidu.com”); //設定路徑與網域

3>Cookie的刪除與過期時間
在php中沒有指定刪除Cookie的函數,而是透過設定cookie的過期時間設定到當前時間之前,則該cookie會自動失效從而到達刪除該cookie。

4>判斷Cookie是否為空
isset()
 意義:判斷某一cookie是否存在。
 語法:isset(對應的cookie屬性);
 回傳值:true/false

setcookie("name","SYN");if( isset( $_COOKIE["name"])){    echo  $_COOKIE["name"];
}else{    echo "不存在";
}

Session與cookie的異同

#cookie:
 1、將資料儲存在客戶端,建立起用戶與伺服器之間的聯繫,通常可以解決許多問題,但cookie仍具有一些限制:
 2、cookie相對不太安全,容易被偷用導致cookie欺騙
#  3、單一cookie的值最大隻能儲存4k
 4、每次請求都要進行網路傳輸,佔用頻寬

session:
 1、將使用者的會話資料儲存在服務端,沒有大小限制,
2.透過一個session_id進行使用者識別,PHP預設情況下session id是透過cookie來保存的

//开始使用sessionsession_start();//设置一个session$_SESSION['test'] = time();//显示当前的session_idecho "session_id:".session_id();echo "<br>";//读取session值echo $_SESSION['test'];//销毁一个sessionunset($_SESSION['test']);echo "<br>";
var_dump($_SESSION);

二、Session

1>session使用

先執行session_start方法開啟session,再透過全域變數$_SESSION進行session的讀寫。預設情況下,session是以文件形式儲存在伺服器上的,因此當一個頁面開啟了session之後,會獨佔這個session文件,這樣會導致當前使用者的其他並發存取無法執行而等待。可以採用快取或資料庫的形式儲存來解決這個問題。
 session會自動的對要設定的值進行encode與decode,因此session可以支援任意資料類型,包括資料與物件等。

session_start();$_SESSION['ary'] = array('name' => 'jobs');$_SESSION['obj'] = new stdClass();
var_dump($_SESSION);

2>刪除和銷毀session

#unset()
 在PHP用unset函數刪除某個session值,刪除後就會從全域變數$_SESSION中移除,無法存取。

session_start();$_SESSION['name'] = 'jobs';unset($_SESSION['name']);echo $_SESSION['name']; //提示name不存在

session_destroy()
 session_destroy函數會刪除所有數據,但是session_id仍然存在。

session_start();$_SESSION['name'] = 'jobs';$_SESSION['time'] = time();
session_destroy();

特別注意:
 session_destroy()並不會立即的銷毀全域變數

_SESSION才為空,因此如果需要立即銷毀$_SESSION,可以使用unset()。

3>使用session來儲存使用者的登陸資訊

登录信息既可以存储在sessioin中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,cookie需要进行格式化与加密存储,而session存储在服务端则安全性较高。

<?phpsession_start();//假设用户登录成功获得了以下用户数据$userinfo = array(    &#39;uid&#39;  => 1011,    'name' => 'spark',    'email' => '1637167XX@qq.com',    'sex'  => 'F');
header("content-type:text/html; charset=utf-8");/* 将用户信息保存到session中 */$_SESSION['uid'] = $userinfo['uid'];$_SESSION['name'] = $userinfo['name'];$_SESSION['userinfo'] = $userinfo;//* 将用户数据保存到cookie中的一个简单方法 */$str =serialize($userinfo); //将用户信息序列化setcookie('userinfo', $str);

了解更多关于序列化serialize;

相关推荐:

php用户登录代码session、cookie自动记忆功能

cookie 和session 的定义和区别

php session会话如何写入redis

以上是php會話控制session、cookie介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn