1>cookie介紹
Cookie是儲存在客戶端瀏覽器中的數據,可以透過Cookie來追蹤與儲存使用者資料。一般情況下,Cookie會透過HTTPheaders從服務端返回客戶端。多數web程序都支援對Cookie的操作,因為Cookie是存在於HTTP的標頭之中。
_COOKIE[‘key’]的形式來讀取某個Cookie值。
在PHP透過setcookie函數對Cookie進行設置,任何從瀏覽器發回的Cookie,PHP都會自動的將他儲存在
使用會話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。
參數:
value, time()+3600, “path/”, “baidu.com”); //設定路徑與網域
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:相對於
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 "不存在"; }
#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);
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才為空,因此如果需要立即銷毀$_SESSION,可以使用unset()。
session_destroy()並不會立即的銷毀全域變數
3>使用session來儲存使用者的登陸資訊
登录信息既可以存储在sessioin中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,cookie需要进行格式化与加密存储,而session存储在服务端则安全性较高。
<?phpsession_start();//假设用户登录成功获得了以下用户数据$userinfo = array( 'uid' => 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介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!