首先談談cookie吧,百度百科是這樣定義的:是網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。
php中產生一個cookie的方法很簡單:setcookie(name, value, expire, path, domain);
name:cookie中定義的名字。
value:cookie中對name所儲存的值。這個值儲存在了使用者的終端;不要儲存敏感資訊(個人重要訊息,金錢)。
expire:cookie中名值對儲存的到期時間,這個值是以時間戳記的形式儲存下來的。
path:cookie值儲存的有效路徑,如果設定成 ‘/’ 那麼對整個項目都有效,如果設定成 ‘/foo/’ 那麼cookie的有效路徑在foo以及其下屬檔案,如果沒有做任何設定那麼他的有效路徑是當前檔案夾。
domian:cookie可用的網域名稱範圍。
<?php
setcookie('site_name', 'IT部落格');//設定一個cookie:site_name他的值是IT部落格,這樣就建立了一個會話,不過這個cookie儲存在了記憶體中隨著瀏覽器的關閉而銷毀。
setcookie('site_name', 'IT部落格', time() + 86400);//設定cookie並將他的到期時間設定為一天后,這樣的會話會將cookie的值儲存到硬碟中,關閉瀏覽器,一天內cookie在瀏覽器開啟的時候還是有效。
?> 寫到這裡想起了以前同事在項目中遇到的問題:比如我有一個功能使用者瀏覽的前10個頁面我要在頁面中顯示用於提示使用者瀏覽過的頁面,這裡面就用到了cookie,使用者瀏覽的頁面大於10個之後會做分割只取前10個,array_slice可以幫到你,array_slice切割完之後cookie中儲存的頁面資訊是不是減少了呢?可能會有這個疑問。帶著這個疑問咱們說說cookie的銷毀方式吧。
cookie銷毀方式一:將cookie值設定為空白。
<?php
setcookie('site_name', '');
?> cookie銷毀方式二:將cookie值設定為到期時間。
<?php
setcookie('site_name', 'IT部落格', time() - 86400);
?> 看到這裡你說array_slice會不會切割cookie中的值,使cookie的值減少呢?
下面說一說session:session是一種伺服器的機制,伺服器使用一種類似於散列表的結構來儲存資訊,每一個網站的訪客都會被賦予一個唯一的標識符進行識別(回話ID)。他的存放形式有兩種:1是url傳遞,2是cookie儲存。
php中常用的session的函數中最重要的就是session_start(),沒有開啟session的話一切都免談。
php.ini中也有一些session的設定比如:
session.save_handler = files —— session的儲存形式以檔案形式儲存。
session.save_path = “N;/path” ——— session檔案的儲存路徑,這個路徑需要自己建立且有寫入的許可權。其中N;/path中的N必須是一個整數這樣可以使session檔案儲存在不同的目錄中,這對於伺服器處理大量的session檔案是有協助的。
session和cookie的區別:
1.session儲存在伺服器端,通過session.save_path可以設定session檔案在伺服器的位置。
2.cookie儲存在用戶端,分為臨時會話(關閉瀏覽器則銷毀,儲存在記憶體)、持久性會話(在有效期間內一直可以調用,儲存在硬碟上)。
3.session相對cookie要安全一些,不過大量的session也會導致伺服器的壓力。
session和cookie的聯絡:
session的有效執行有兩種方式:一是與cookie進行互動,二是通過url傳遞。
ps:sessionid是一個很有用有時候也會導致問題的一個標識,有一次通過ajax發送50多個請求通過socket請求資料,在php端socket返回資料有時候會比較慢,雖然ajax是非同步請求但是在php端就不一樣了,先來的會把後來的請求堵在後面,其中的標識符就是sessionid,由於這個sessionid導致了php端的順序處理增加了使用者的等待時間,致使使用者體驗較差。其中的解決方案是用session_write_close()斷開sessionid的連結。