php面試題之三——PHP網絡編程(高級部分)

3、PHP網絡編程

[!!!]1.禁用COOKIE後SEESION還能用嗎?(51.com筆試題)

能夠,COOKIE和SESSION都是用來實現會話機制的,因爲http協議是無狀態的,因此要想跟蹤一個用戶在同一個網站之間不一樣頁面的狀態,須要有這麼一個機制----會話機制。
COOKIE:將會話信息的保存到瀏覽器端。
SESSION:將會話信息保存到服務器端。php

SESSION默認狀況下是基於COOKIE的,對於SESSION來講,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到cookie當中。
若是禁用了COOKIE,則基於COOKIE的SESSION很差使了,咱們可使用get,傳遞SID,或者直接開啓透明的SID(此時須要關閉基於cookie的SESSION配置項)。html

[!!!]相關題目:SESSION與COOKIE的區別?
  1. COOKIE保存在客戶端,而SESSION則保存服務器端。
  2. 從安全性的角度來說,SESSION的安全性要高。
  3. 從保存內容的類型的角度來說,COOKIE只保存字符串(及可以自動轉換成字符串),而session則能夠保存全部的數據類型。
  4. 從保存內容的大小的角度來說,COOKIE保存的內容是有限制的,比較小,而SESSION基本上沒有這個限制。
  5. 從性能的角度來說,用SESSION的話,對服務器的壓力會更大一些。
2.請使用socket相關函數(非curl)實現以下功能:構造一個post請求,發送到指定httpserver的指定端口的指定請求路徑(如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>';
        }
    }
?>
3.在HTTP 1.0中,狀態碼401的含義是________;若是返回「找不到文件」的提示,則可用header函數,其語句爲__________;

未經受權:訪問因爲憑據無效被拒絕
header("HTTP/1.0 404 Not Found")apache

[!!]4.如何修改SESSION的生存時間?

要注意這裏的生存時間指的是什麼?
因爲session默認是基於cookie的,也就是說使用session會話技術,首先是將session數據保存到服務器端,其次會將sessionID保存到瀏覽器端,保存在服務器端的session文件生命週期由php.ini中的session.gc_maxlifetimegc_probabilitygc_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,"/");
5.How can you get round the stateless nature of HTTP using PHP?(Yahoo)

最主要的兩個選擇是SESSION和COOKIE。使用SESSION的方法是在每一頁的開始加session_start(),而後利用$_SESSION來存取SESSION變量。至於COOKIE你只需記着一個原則:在輸出任何文字以前調用set_cookie()函數設置COOKIE,使用$_COOKIE獲取COOKIE變量。安全

6.PHP程序中如何設置當前頁面的編碼爲utf-8?

header(「content-type:text/html;charset=utf-8」);服務器

7.如何設置一個cookie的名字爲username,值爲jack,而且讓此cookie一週後失效?

setcookie(‘username’,’jack’,time()+7243600);

[!!]8.一個瀏覽器最多能夠產生多少個cookie,每一個cookie文件最大不能超過多少?

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)和等號。

9.設置或讀取session以前,須要作什麼?

session_start()前面不能有任何輸出,包括空行。

相關題目:使用setcookie函數前,須要注意什麼?

前面不能有任何輸出,包括空行。

10.請描述出七層網絡模型的名稱,由下到上(可使用中文描述)

物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層

11.說說下面這些這些協議的全稱和中文解釋(提示:都是工做在應用層)SMTP、POP三、HTTP、FTP、DNS(小米)

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)域名系統(服務)協議

[!!]12.COOKIE、SESSION的聯繫和區別,多臺web服務器如何共享SESSION?

COOKIE和SESSION都是用於會話機制,COOKIE保存在客戶端,而SESSION則保存在服務器端。
在默認狀況下,SESSION機制是基於COOKIE的,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到COOKIE當中,在下次請求的時候,由瀏覽器攜帶這個COOKIE。
要想多臺web服務器共享SESSION,能夠利用MySQL數據庫存儲SESSION數據。

13.HTTP/1.0中,狀態碼200 301 304 403 404 500的含義(小米)

200 OK服務器成功處理了請求
301 Moved Permanently(重定向)請求的URL已移走
304 Not Modified(未修改)客戶的緩存資源是最新的,要客戶端使用緩存
403 Forbidden(禁止)請求被服務器拒絕了
404 Not Found未找到資源
Internal Server Error(內部服務器錯誤)服務器遇到一個錯誤,使其沒法爲請求提供服務

[!!!]14.請描述PHP(或其餘語言)Session的運行機制,大型網站中Session方面應注意什麼?(小米)

session機制是一種服務器端的機制,它將數據保存到服務器端。
當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識,稱爲sessionid,若是已包含一個sessionid則說明之前已經爲此客戶端建立過session,服務器就按照sessionid把這個session檢索出來使用(若是檢索不到,可能會新建一個),若是客戶端請求不包含sessionid,則爲此客戶端建立一個session而且生成一個與此session相關聯的sessionid,sessionid的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個sessionid將被在本次響應中返回給客戶端以cookie的形式保存。

session在大訪問量網站上確實影響系統性能,影響性能的緣由之一由文件系統設計形成,在同一個目錄下超過10000個文件時,文件的定位將很是耗時。另外就是小文件的效率問題,通常咱們的session數據都不會太大(1~2K),若是有大量這樣1~2K的文件在磁盤上,IO效率確定會不好,咱們能夠採用改寫session存儲機制,好比存放到數據庫中。

15.在子網掩碼爲255.255.255.248的局域網中可以同時使用的IP有多少個?(億郵)

6個,255.255.255.248換算成二進制就是11111111.11111111.11111111.11111000
後面的三位用來表示主機,前面的29位用來表示網絡。
三位表示主機,就是能夠用來表示2^3=8個,再減去網絡地址和廣播地址,就是6個了。

16.簡述Tcp協議的三次握手過程。(億郵)

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狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據。

17.你會用哪一個函數設置當前內容的Content-Type?(卓望)

header函數

18.經過頁面輸入用戶名abc和密碼123登陸到www.10086.cn,請寫出該次請求的HTTP協議報文(包括請求行、消息報頭、請求正文)。(卓望)
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
相關文章
相關標籤/搜索