能夠,COOKIE和SESSION都是用來實現會話機制的,因爲http協議是無狀態的,因此要想跟蹤一個用戶在同一個網站之間不一樣頁面的狀態,須要有這麼一個機制----會話機制。
COOKIE:將會話信息的保存到瀏覽器端。
SESSION:將會話信息保存到服務器端。php
SESSION默認狀況下是基於COOKIE的,對於SESSION來講,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到cookie當中。
若是禁用了COOKIE,則基於COOKIE的SESSION很差使了,咱們可使用get,傳遞SID,或者直接開啓透明的SID(此時須要關閉基於cookie的SESSION配置項)。html
http://www.example.com:8080/test
)。請求中包含如下變量:用戶名(username):溫柔一刀
密碼(pwd):&123=321&321=123&
我的簡介(intro):Hello world!
且該http server須要如下cookie來進行簡單的用戶動做跟蹤:
cur_query:you&me
last_tm:...(上次請求的unix時間戳,定爲當前請求時間前10分鐘)
cur_tm:...(當前請求的unix時間戳)
設置超時爲10秒,發出請求後,將http server的響應內容輸出(騰訊)web
參考代碼:數據庫
<?php if($fp = fsockopen('localhost','80')){ //鏈接成功 $request_data="POST/2.php HTTP/1.1"."\r\n";//請求行 $request_data.="Host:localhost"."\r\n";//host頭信息 $request_data.="User-Agent:Mozilla/5.0(compatible;MSIE 9.0;Windows NT 6.1;Trident/5.0)"."\r\n";//host頭信息 $request_content="username=".urlencode('溫柔一刀') ."&pwd=".urlencode('&123=321&321=123&') ."&intro=".urlencode("Hello world!"); $request_data.="Content-Type:application/x-www-form-urlencoded"."\r\n"; $request_data.="Content-Length:".strlen($request_content)."\r\n"; $cur_query=urlencode("you&me"); $last_tm=time()-10*60; $cur_tm=time(); $request_data.="Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm"."\r\n"; $request_data.="\r\n";//請求頭信息結束時的空行 //請求主體數據部分 $request_data.=$request_content; //利用創建好的通道,將數據發送過去 fwrite($fp,$request_data);//寫入數據(發送數據) //讀取數據 while(!feof($fp)){//判斷是否沒有到文件末尾 $resp_data=fgets($fp); echo$resp_data.'<br>'; } } ?>
未經受權:訪問因爲憑據無效被拒絕
header("HTTP/1.0 404 Not Found")apache
要注意這裏的生存時間指的是什麼?
因爲session默認是基於cookie的,也就是說使用session會話技術,首先是將session數據保存到服務器端,其次會將sessionID保存到瀏覽器端,保存在服務器端的session文件生命週期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor來決定,而保存在客戶端的sessionID由客戶端cookie來決定。
默認其生存週期直到瀏覽器關閉,它也能夠經過php.ini中的設置session.cookie_lifetime來控制,兩者共同來決定session的生存時間,兩者中的其中任意一個失效了,就會形成session失效,要根據本身的需求來決定是要從哪方面來修改其生存時間。編程
參考1:將php.ini中的session.gc_maxlifetime設置爲9999重啓apache
參考2:瀏覽器
$savePath="./session_save_dir/"; $lifeTime=小時*秒; session_save_path($savePath); session_set_cookie_params($lifeTime); session_start();
參考3:緩存
session_start(); $lifeTime=24*3600;//保存一天 setcookie(session_name(),session_id(),time()+$lifeTime,"/");
最主要的兩個選擇是SESSION和COOKIE。使用SESSION的方法是在每一頁的開始加session_start(),而後利用$_SESSION來存取SESSION變量。至於COOKIE你只需記着一個原則:在輸出任何文字以前調用set_cookie()函數設置COOKIE,使用$_COOKIE獲取COOKIE變量。安全
header(「content-type:text/html;charset=utf-8」);服務器
setcookie(‘username’,’jack’,time()+7243600);
cookie的總數量沒有限制,可是每一個域名的COOKIE數量和每一個COOKIE的大小是有限制的!
IE每一個域名限制爲50個。
Firefox每一個域名cookie限制爲50個。
Opera每一個域名cookie限制爲30個。
Safari/webkit貌似沒有cookie限制。可是假如cookie不少,則會使header大小超過服務器的處理的限制,會致使錯誤發生。
不一樣瀏覽器間每一個cookie文件大小也不一樣
Firefox和safari是4097個字節,包括名(name)、值(value)和等號。
Opera是4096個字節,包括:名(name)、值(value)和等號。
IE是4095個字節,包括:名(name)、值(value)和等號。
session_start()前面不能有任何輸出,包括空行。
前面不能有任何輸出,包括空行。
物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層
SMTP(Simple Mail Transfer Protocol)簡單郵件傳輸協議
POP3(Post Office Protocol 3)郵局協議第3版
HTTP(Hypertext Transfer Protocol)超文本傳輸協議
FTP(File Transfer Protocol)文件傳輸協議
DNS(Domain Name System and Domain Name Service protocol)域名系統(服務)協議
COOKIE和SESSION都是用於會話機制,COOKIE保存在客戶端,而SESSION則保存在服務器端。
在默認狀況下,SESSION機制是基於COOKIE的,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到COOKIE當中,在下次請求的時候,由瀏覽器攜帶這個COOKIE。
要想多臺web服務器共享SESSION,能夠利用MySQL數據庫存儲SESSION數據。
200 OK服務器成功處理了請求
301 Moved Permanently(重定向)請求的URL已移走
304 Not Modified(未修改)客戶的緩存資源是最新的,要客戶端使用緩存
403 Forbidden(禁止)請求被服務器拒絕了
404 Not Found未找到資源
Internal Server Error(內部服務器錯誤)服務器遇到一個錯誤,使其沒法爲請求提供服務
session機制是一種服務器端的機制,它將數據保存到服務器端。
當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識,稱爲sessionid,若是已包含一個sessionid則說明之前已經爲此客戶端建立過session,服務器就按照sessionid把這個session檢索出來使用(若是檢索不到,可能會新建一個),若是客戶端請求不包含sessionid,則爲此客戶端建立一個session而且生成一個與此session相關聯的sessionid,sessionid的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個sessionid將被在本次響應中返回給客戶端以cookie的形式保存。
session在大訪問量網站上確實影響系統性能,影響性能的緣由之一由文件系統設計形成,在同一個目錄下超過10000個文件時,文件的定位將很是耗時。另外就是小文件的效率問題,通常咱們的session數據都不會太大(1~2K),若是有大量這樣1~2K的文件在磁盤上,IO效率確定會不好,咱們能夠採用改寫session存儲機制,好比存放到數據庫中。
6個,255.255.255.248換算成二進制就是11111111.11111111.11111111.11111000
後面的三位用來表示主機,前面的29位用來表示網絡。
三位表示主機,就是能夠用來表示2^3=8個,再減去網絡地址和廣播地址,就是6個了。
TCP是主機對主機層的傳輸控制協議,提供可靠的鏈接服務,採用三次握手確認創建一個鏈接:
第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據。
header函數
POST www.10086.cn HTTP/1.1 Accept:text/html,application/xhtml+xml,*/* Referer:http://localhost/a.html Accept-Language:zh-CN User-Agent:Mozilla/5.0(compatible;MSIE 10.0;Windows NT 6.1;WOW64;Trident/6.0; KB974487) Content-Type:application/x-www-form-urlencoded Accept-Encoding:gzip,deflate Host:localhost Content-Length:25 Connection:Keep-Alive username=abc&password=123