http://wenwen.soso.com/z/q189568957.htm 實現本地修改網站,服務器上的網站跟着自動更新php
Cookie與Session數據庫
Cookie和Session是兩種不一樣的存儲機制,前者是從一個Web頁面到下一個頁面的數據傳遞方法,存儲在客戶端;後者是讓數據在頁面中持續有效的方法,存儲在服務器端。數組
1.Cookie管理瀏覽器
1.1 什麼是Cookie?緩存
Cookie是一種在客戶瀏覽器存儲數據並以此來跟蹤和識別用戶的機制。(簡單地說,Cookie是Web服務器暫時存儲在用戶硬盤上的一個文本文件,並隨後被Web瀏覽器讀取。)當用戶再次訪問該Web網站時,網站經過讀取Cookie文件記錄這位訪客的特定信息(如上次訪問的位置,花費的時間,用戶名和密碼等),從而迅速做出響應。如在頁面中不須要輸入用戶的ID和密碼便可直接登陸網站等。安全
Cookie文本文件的命令格式爲:用戶名@網站地址[數字].txt服務器
1.2 Cookie的功能cookie
Web服務器能夠經過Cookie包含的信息來篩選或維護這些信息,以判斷在HTTP傳輸中的狀態。Cookie經常使用於如下三個方面:session
1)記錄訪客的某些信息。如能夠利用Cookie記錄用戶訪問網頁的次數,或者記錄訪客曾經輸入過的信息。另外,某些網站可使用Cookie自動記錄訪客上次登陸的用戶名。函數
2)在頁面之間傳遞變量。瀏覽器並不會保存當前頁面上的任何變量的信息,當頁面被關閉時頁面上的全部變量信息將隨之消失。若是用戶聲明一個變量id=8,要把這個變量傳遞到另外一個頁面,能夠把變量id以Cookie形式保存下來,而後在下一頁讀取該Cookie來獲取該變量的值。
3)將所查看的Internet頁存儲在Cookie臨時文件夾中,能夠提升之後瀏覽的速度。
1.3建立Cookie
在PHP中經過setcookie()函數建立Cookie。在建立Cookie以前必須瞭解的是,Cookie是HTTP頭標的組成部分,而頭標必須在頁面其它內容以前發送,所以它必須最早輸出。
使用setcookie建立Cookie,實例代碼以下:
<?php
setcookie("TMCookie",$value,time()+3600,"/tm/」,".mrbccd.com",1);//設置有效時間爲60秒,有效目錄爲「/tm/」,有效域名爲"mrbccd.com" 及其全部子域名
?>
1.4讀取Cookie
在PHP中能夠直接經過超級全局數組$_COOKIE[]來讀取瀏覽器端的Cookie值
1.5刪除Cookie
1)使用setcookie()函數刪除Cookie
代碼爲:setcookie("name","",time()-1);
在上面的代碼中,time()函數返回以秒錶示的當前時間戳,把當前時間減1秒就會獲得過去的時間,從而刪除Cookie.把失效時間設置爲0,也能夠直接刪除Cookie
2)在瀏覽器中手動刪除Cookie
1.6 Cookie的生命週期
若是Cookie不設定失效時間,就表示它的生命週期就爲瀏覽器會話的期間,只要關閉IE瀏覽器,Cookie就會自動消失。這種Cookie被稱爲會話Cookie,通常不保存在硬盤上,而是保存在內存中。
若是設置了失效時間,那麼瀏覽器會把Cookie保存到硬盤中,再次打開瀏覽器時會依然有效,直到它的有效期超時。
2.Session管理
2.1什麼是session
session 譯爲會話,在計算機術語中,session是指一個終端用戶與交互系統進行通訊的時間間隔,一般指從註冊進入系統到註銷退出系統所通過的時間。
2.2session工做原理
當啓動一個session會話時,會生成一個隨機且惟一的session_id,也就是session的文件名,此時session_id存儲在服務器的內存中。當關閉頁面時此id會自動註銷,從新登陸此頁面,會再次生成一個隨機且惟一的id.
2.3 session的功能
session在Web技術中很是重要。因爲網頁時一種無狀態的鏈接程序,所以沒法得知用戶的瀏覽狀態。經過session則可記錄用戶的有關信息,以供用戶再次以此身份對Web服務器提交要求時做確認。例如,在電子商務網站中,經過session記錄用戶登陸的信息,以及用戶所購買的商品,若是沒有session,那麼用戶每進入一個頁面都須要登陸一次用戶名和密碼。
2.4 啓動session會話
啓動PHP會話有兩種方式: 一種是使用session_start()函數,另外一種是使用session_register()函數爲會話建立一個變量來隱含地啓動會話。
1)經過session_start()函數啓動會話 ,語法格式爲:
bool session_start(void);
2)經過session_register()函數建立會話
session_register()函數用來爲會話建立一個變量來隱含地啓動會話,但要求設置php.ini文件的選項,即將register_globals指令設置爲on,而後從新啓動Apache服務器便可。(此時不須要調用session_start()函數,PHP會在建立變量以後隱含地調用session_start()函數)
2.5 註冊會話
會話變量建立後,所有保存在$_SESSION中。經過數組$_SESSION建立一個會話變量很容易,只要直接給該數組添加一個元素便可。
例如:啓動會話,建立一個session變量並賦空值,代碼以下:
<?php
session_start();
$_SESSION["admin"]=null;
?>
2.6 使用會話
首先須要判斷會話變量是否有一個會話ID存在,若是不存在,就建立一個,而且使其可以經過全局數組$_SESSION進行訪問;若是已經存在,則將這個已建立的會話變量載入以供用戶使用;
如,判斷存儲用戶名的session會話變量是否爲空,若是不爲空,則將該會話變量賦給$myvalue,代碼以下:
<?php
if(!empty($_SESSION['session_name']))
$myvalue=$_SESSION['session_name'];
?>
2.7 刪除會話
1)刪除單個會話
unset($_SESSION['user']); 使用unset()函數時,要注意$_SESSION數組中元素不能省略,即不能夠一次註銷整個數組,這樣會禁止整個會話的功能,如unset($_SESSION)函數會將全局變量$_SESSION銷燬,並且沒有辦法將其恢復,用戶也不能再註冊$_SESSION變量。
2)刪除多個會話
可將一個空的數組賦值給$_SESSION來實現,代碼以下:$_SESSION=array();
3)結束當前會話
若是整個會話已經結束,首先應該註銷全部的會話變量,而後使用session_destory()函數清除結束當前的會話,並清空會話中的全部資源,完全銷燬session,代碼以下:
session_destroy();
2.8 session設置時間
1)客戶端沒有禁止Cookie
使用session_set_cookie_params()設置session的失效時間,此函數是session結合cookie設置失效時間。如要讓session在1分鐘後失效,實例代碼以下:
<?php
$time=1*60;
session_set_cookie_params($time);
session_start();
$_SESSION[username]='mr';
?> (通常不推薦使用此函數,此函數在一些瀏覽器上會出現問題,因此通常手動設置失效時間)
使用setcookie()函數可對session設置失效時間,代碼以下:
<?php
session_start();
$time=1*60;
setcookie(session_name(),session_id(),time()+$time,"/"); session_name是session的名稱,session_id是判斷客戶端用戶的標識,由於session_id是隨機產生的惟一名稱,因此session是相對安全的。失效時間和Cookie的失效時間同樣,最後一個參數爲可選參數,是放置Cookie的路徑。
$_SESSION['user']="mr";
?>
2)客戶端禁止Cookie
當客戶端禁用Cookie時,Session頁面間傳遞會失效,能夠將客戶端禁止Cookie想象成一家大型連鎖超市,若是在其中一家超市內辦理了會員卡,可是超市之間沒有聯網,那麼會員卡就只能在辦理的那家使用,解決這個問題的方法有4個。
① 在登陸以前提醒用戶必須打開Cookie.
② 設置php.ini文件中的session.use_trans_sid=1,或者編譯時打開-enable-trans-sid選項,讓PHP自動跨頁面傳遞session_id.
③ 經過GET方法,隱藏表單傳遞session_id,在頁面間傳遞中手動調用。
④ 使用文件或者數據庫存儲session_id,在頁面間傳遞中手動調用。
2.9 Session 臨時文件
使用PHP函數session_save_path()存儲session臨時文件,可緩解因臨時文件的存儲致使服務器效率低和站點打開緩慢的問題
<?php
$path='./tmp/';
session_save_path($path);
session_start(); //初始化session
$_SESSION[username]=true;
?>
2.10 session緩存
session 緩存是將網頁中的內容臨時存儲到IE客戶端的Temporary Internet Files文件夾下,而且能夠設置緩存的時間。當第一次瀏覽網頁後,頁面的部份內容在規定的時間內就被臨時存儲在客戶端的臨時文件夾中,這樣在下次訪問這個頁面時,就能夠直接讀取緩存中的內容,從而提升網站的瀏覽效率。
緩存用的是session_cache_limiter()函數,語法是: string session_cache_limiter([string cache_limiter]) cache_limiter爲public或private。同時session緩存並非指在服務器端而是客戶端緩存,在服務器中沒有顯示。緩存時間的設置,使用的是session_cache_expire() 語法格式爲:int session_cache_expire([int new_cache_expire]) 參數new_cache_expire是session緩存的時間,單位爲分鐘。
2.11session 數據庫存儲
雖然經過改變session 存儲文件夾使session不至於將臨時文件夾填滿而形成站點癱瘓,可是若是一個大型網站一天登陸1000人,一個月登陸了30000人,這時站點中存在30000個session文件,要在這30000個文件中查詢一個session_id應該不是件輕鬆的事情,那麼這時就能夠用session數據庫存儲,也就是PHP中的session_set_save_handler()函數。
bool session_set_save_handler(string open,string close,string read,string write,string destroy,string gc)
open(save_path,session_name) 找到session存儲地址,取出變量名稱
close()不須要參數,關閉數據庫。
read(key) 讀取session鍵值,key對應session_id
write(key,data) 其中data對應設置的session變量
destroy(key) 註銷session對應的session鍵值
gc(expiry_time) 清除過時session記錄