PHP知識大全【基礎】

1. 變量如何定義?如何檢查變量是否定義?如何刪除一個變量?怎樣檢測變量是否設置?

       $定義  isset()// 檢測變量是否設置

        defined()// 檢測常量是否設置

       unset()//銷燬指定的變量

       empty()// 檢測變量是否爲空

 

2. 什麼是可變變量?

       一個變量的變量名可以動態的設置和使用。

       $a = 'hello' , $$a = 'world',  ${$a}=hello world

 

3. 變量賦值方式有哪幾種?

       1)直接賦值   2)變量間賦值   3)引用賦值

 

4. 引用和拷貝有什麼區別?

       拷貝是將原來的變量內容複製下來,拷貝後的變量與原來的變量使用各自的內存,互不干擾。

       引用相當於是變量的別名,其實就是用不同的名字訪問同一個變量內容。當改變其中一個變量的值時,另一個也跟着發生變化。

 

5. php中變量有哪些基本數據類型?

       php支持8種原始數據類型包括:

       四種標量類型(布爾型boolean,整型interger,浮點型float/double , 字符串string

       兩種複合類型(數組array 對象object)

       兩種特殊類型(資源resourceNULL

 

6. 其它類型轉換爲boolean類型時,哪些被認爲是false

       布爾值false,整型值0浮點型值0.0空白字符串,字符串'0', 空數組,特殊數據類型NULL, 沒有設定的變量。

 

   empty()函數在哪些情況下返回true

       布爾值false,整型值0浮點型值0.0空白字符串,字符串'0', array()空數組,特殊數據類型NULL, 沒有任何屬性的對象,沒有賦值的變量。

 

7. 如果定義了一個變量$a,但是沒有賦初始值      

       那麼$a==0嗎?    $a==false嗎?    $a==''嗎?

       $a==NULL嗎?   $a===NULL嗎?     答:echo=>什麼都沒有 ,var_dump=>NULL

       empty($b)==true嗎?————————————echo=>1 , var_dump=>bool(true)

       此時如果輸出$a++是多少?———————   echo=>什麼都沒有 ,var_dump=>NULL

       如果輸出++$a又是多少?—————————      echo=>1  , var_dump=>int(1)

 

8. 字符串怎麼轉成整數,有幾種方法?怎麼實現?

       強制類型轉換: (整型)字符串變量名;

       直接轉換:settype(字符串變量,整型);

       intval(字符串變量);

 

9. 標量數據和數組的最大區別是什麼?

       一個標量只能存放一個數據,而數組可以存放多個數據。

 

10. 常量如何定義? 如何檢測一個常量是否被定義?常量的值只能是哪些數據類型?

       define()//定義常量 , defined()//檢查常量是否定義

       常量的值只能是標量類型的數據。

 

11. 常量分爲系統內置常量和自定義常量。請說出最常見的幾個系統內置常量?

       __FILE__ , __LINE__ , PHP_OS ,PHP_VERSION

 

12. 如果定義了兩個相同的常量,前者和後者哪個起作用?

       前者起作用,因爲常量一旦定義就不能被重新定義或者取消定義。

 

13. 常量和變量有哪些區別?

       1)常量前沒有$符號;

       2)常量只能通過define()定義,而不能通過賦值語句定義;

       3)常量可以在任何地方定義和訪問,而變量有全局和局部之分;

       4)常量一旦定義就不能被重新定義或者取消定義,而變量而通過賦值方式重新定義;

       5)常量的值只能是標量數據,而變量的數據庫類型有8種原始數據類型。

 

14. PHP中常用的幾個預定義的全局數組變量是哪些?

       9大預定義的內置數組變量:

       $_POST, $_GET, $_REQUEST, $_SESSION,$_COOKIE, $_FILES$_SERVER, $_ENV, $GLOBALS

 

15. 在實際開發中,常量最常用於哪些地方?

       1)連接數據庫的信息定義成常量,如數據庫服務器的用戶名、密碼、數據庫名、主機名;

       2)將站點的部分路徑定義成常量,如web絕對路徑,smarty的安裝路徑,modelview或者controller的文件夾路徑;

       3)網站的公共信息,如網站名稱,網站關鍵詞等信息。

 

16. 函數的優越性有哪些?

       提高程序的可維護性  提高軟件的可靠性  提高程序的可重用性  提高程序的開發效率

 

17. 如何定義一個函數?函數名區分大小寫嗎?

       1)使用 function 關鍵字;

       2)函數命名規則和變量一樣,以字母或者下劃線開頭,而不能以數字開頭;

       3)函數名不區分大小寫;

       4)函數名不可以使用已經聲明過的或者系統自建的函數名稱。

 

18. 什麼是變量的能見度或者說是變量作用域?

       就是變量在程序中的可作用範圍。根據變量的能見度,變量分爲局部變量和全局變量。

 

19. 什麼是局部變量和全局變量?函數內是否可以直接調用全局變量?

       局部變量是函數內部定義的變量,其作用域是所在的函數。如果函數外還有一個跟局部變量名字一樣的變量,程序會認爲它們兩個是完全不同的兩個變量。當退出函數的時候,其中的局部變量就同時被清除。全局變量是定義在所有函數以外的變量,其作用域是整個php文件,但是在用戶自定義的函數內部是無法使用的。如果一定要在用戶自定義的函數內部使用全局變量,那麼就需要使用global關鍵字聲明。也就是說如果在函數內的變量前加上golbal來修飾,那麼函數內部就可以訪問到這個全局變量,不僅可以利用這個全局變量進行運算而且可以對這個全局變量進行重新賦值。全局變量還可以使用 $GLOBALS['var'] 來調用。

 

21. 什麼是靜態變量?

       如果一個函數內定義的變量前使用關鍵字static來聲明,那麼該變量就是靜態變量。

       一般函數內的變量在函數調用結束後,其存儲的數據將被清除,所佔的內存空間也被釋放。而使用靜態變量時,該變量會在函數第一次被調用時被初始化,初始化後該變量也不會被清除,當再次調用該函數時,這個靜態變量不再被初始化,而能保存上次函數執行完後的值。可以說靜態變量在所有對該函數的調用之間共享。

 

22. php中函數傳遞參數的方式有哪些?兩者有什麼區別?

       按值傳遞和按地址傳遞(或按引用傳遞)

       (1)按值傳遞待傳遞的變量,與傳遞給函數之後的變量是存儲在不同的空間中。所以函數體內對

               該變量值做的修改,不影響原本的變量值。

     (2)按地址傳遞: 使用 & 符號,表明該參數是以地址的方式傳遞值。並不會將主程序中的指定數值或目標變量傳遞給函數,而是把該數值或變量的內存儲存區塊地址導入函數之中,所以函數體內的該變量和主程序中的該變量在內存中是同一個。函數體做的修改,直接影響到函數體外部的該變量的值。

 

 

23. 什麼是遞歸函數?如何進行遞歸調用?

       遞歸函數其實就是調用自身的函數,但是必須滿足以下兩個條件:

       1)在每一次調用自身時,必須是更接近於最終結果;

       2)必須有一個確定的遞歸終止條件,不會造成死循環。

       舉例說明:

       在實際工作中往往會在遍歷文件夾的時候使用。

       如果有個例子是希望獲取到目錄windows下所有的文件,那麼先遍歷windows目錄,如果發現其中還有文件夾,那麼就會調用自身,繼續往下尋找,依次類推,

       直到遍歷到再也沒有文件夾爲止,這也就是意味着遍歷出來了所有的文件。

 

24. 判斷一個函數是否存在?

     function_exists(string $function_name )  如果存在,返回true,不存在則返回false

 

25. func()@func()之間有什麼區別?

       第二個函數調用失敗不會報錯,第一個會報錯

 

26.include()require()函數的用法和區別是什麼?include_once()require_once()呢?

       includerequire出現錯誤後的錯誤級別不一樣

       include_once()require_once()在加載之前要判斷是否已經導入

 

27. 說出前置++和後置++的區別?

       前置++是先將變量增加1,然後在將值賦值給原來的變量;

       後置++是先返回變量的當前值,然後再將變量的當前值增加1.

 

28. 字符串運算符“.”與算術運算符“+”有什麼區別?

       當“a”“b”之間使用.時認爲是連字符。如果兩者間是+的時候php會認爲是一次運算。

       1)如果+號兩邊的字符串是數字組成的,那麼會將字符串自動轉爲整型;

       2)如果+號兩邊是純粹的字母,那麼會輸出0

       3)如果+號兩邊的字符串是以數字開頭的,那麼會截取字符串開頭的數字,然後進行運算。

 

29. 什麼是三目(或三元)運算符?

       根據一個表達式的結果在另兩個表達式中選擇一個。

       例如: ($a==true) ? 'good':'bad';

 

30. 控制流程語句有哪些?

       1:三種程序結構    順序結構、分支結構、循環結構

       2:分支: if/esle/esleif/     switch/case/default

       3: switch 需要注意的:

              case子句中的常量可以是整型、字符串型常量、或者常量表達式,不允許是變量。

             同一個switch子句中,case的值不能相同,否則只能取到首次出現case中的值。

       4: 循環  forwhile   do...while

        do...while 後面必須加入分號結尾。

        while do...while 的區別

       5break continue 的區別。

              break可以終止循環。

              continue沒有break強大,只能終止本次循環而進入到下一次循環中。

 

31. 數組的概念是什麼?數組根據索引分爲哪兩種,如何區分?數組的賦值方式有哪兩種?

       數組是一個可以存儲一組或一系列數值的變量(複合型變量)

       索引數組(索引值爲數字,以0開始)和關聯數組(以字符串作爲索引值)

       數組的賦值方式有哪兩種?

       數組的聲明方式主要有兩種。

       1.通過array()函數聲明數組;

可以通過key=>value的方式分別定義索引和值,也可以不定義數組的索引下標,只給出數組的元素值。

       2.直接爲數組元素賦值,不需要調用array()函數。例如:

       $arr[0] = 1;     $arr[1] = 2;

       特別注意:

       數組的下標如果是等價於整數的字符串值(但不能以0開頭),則會被當作整數對待。

       例如: $array[3]  $array['3'] 引用的是相同的一個元素,而 $array['03'] 引用的則就是另外的一個元素了。

 

32.數組如何遍歷?

       for循環

       foreach循環  ,這是最常用的遍歷方式。用法如下:foreach($arr as $key=>$value){}

       list each while 配合起來循環

 

33. foeach數組的時候指針是如何指向的?list()/each()/while()循環數組的時候指針如何指向的呢?

       foreach開始執行的時候,數組內部的指針會自動指向第一個單元。因爲foreach所操作的是指定數組的拷貝,而不是該數組本身。而each()一個數組後,數組指針將停留在數組中的下一個單元或者碰到數組結尾時停留在最後一個單元。如果要再次使用each()遍歷數組,必須要使用reset().

       reset()將數組的內部指針倒回到第一個單元並返回第一個數組單元的值。

 

34. 如何計算數組長度(或者說計算數組中所有元素的個數)?字符串怎麼取長度?

       count() -- 計算數組中的元素個數。

       可以使用count(數組名)或者count(數組名,1),如果有第二個參數,並且是數字1,則表示遞歸統計數組元素的個數。如果第二個參數是數字0,則等同於只有一個參數的count()函數。

       sizeof() -- count() 的別名(count計算數組中的單元數目或對象中的屬性個數)

字符串:strlen()獲取字符串長度

        mb_strlen()— Get string length

 

35. 數組中相關的常用函數有哪些?

       1 count --sizeof別名)—計算數組中的單元數目或對象中的屬性個數   

              例如:int count ( mixed $var [, int $mode ])  $var 通常都是數組類型,任何其它類型都只有一個單元。 $mode 默認值爲0. 1爲開啓遞歸地對數組計數

       2 in_array ( mixed $needle , array $haystack[, bool $strict ] ) 檢查數組中是否存在某個值。如果needle 是字符串,則比較是區分大小寫的。如果第三個參數 strict 的值爲 TRUE in_array() 函數還會檢查 needle 的類型是否和haystack 中的相同。

       3 array_merge(array $array1 [, array $array2[, array $... ]] ) 將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回作爲結果的數組。

              特別注意:如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。

              如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引

 

       4數組與字符串之間的轉換

              (1)explode ( string $separator ,string $string [, int $limit ] )  使用一個分隔字符來分隔一個字符串。

              (2)implode ( string $glue , array$arr )  使用一個連接符將數組中的每個單元連接爲一個字符串。join implode 的別名

       5 sort(array &$array [, int $sort_flags]) 對數組按照值排序,當本函數結束時數組單元將被從最低到最高重新安排。

 

36. 數組合並函數array_merge()和數組加法運算$arr+ $arr2 的區別是什麼?

       array_merge()->使用array_merge(),如果是關聯數組合並,如果數組的鍵名相同,那麼後面的值將覆蓋前者;如果是數字索引數組合並,則不覆蓋,而是後者附加到前者後面。"+"->使用數組加法運算,與array_merge()不同,加法運算不管是關聯數組還是數字索引數組,都是將相同鍵名的的值捨棄,也就是隻保留首次出現該鍵名的元素,後來的具有相同鍵名的元素都不會被加進來。

 

37. 字符串定義的時候單引號和雙引號有什麼區別?

       單引號加載速度比雙引號加載速度快

38.echo(),print(),print_r()的區別?

       (1)echo 是語法,Output one or more strings,沒有返回值;

       (2)print 是函數,不能輸出數組和對象,Output a stringprint有返回值;

       (3)print_r 是函數,可以輸出數組。print_r是個比較有意思的函數,可以輸出stirngintfloat     arrayobject等,輸出array時會用結構表示,print_r輸出成功時返回true;而且print_r可以通過print_r($str,true)來,使print_r不輸出而返回print_r處理後的值。此外,對於echoprint,基本以使用echo居多,因爲其效率比print要高。

 

39. 按照功能分類說說都有哪些字符串處理函數?這些函數的作用是什麼?

       A. 字符串輸出函數

       (1)echo $a,$b,$c......;  是一個語言結構,而不是一個真正的函數。

       (2)print($a)    本函數輸出字符串。若成功則返回 1,失敗返回 0

       (3)print_r($a)

       (4)var_dump($a); 能輸出類型、長度、值

       B. 去除字符串首尾空格的函數: trim ltrim  rtrim(別名:chop   使用第二個參數,還可以去除指定的字符。

       C. 轉義字符串函數:addslashes()

       D. 獲取字符串長度的函數:strlen()

       E. 截取字符串長度的的函數:substr()

       F. 檢索字符串函數: strstr() , strpos()

       G. 替換字符串函數:str_replace()

 

40. 請給出以下問題的正確答案?

       1).$arr = array('james', 'tom','symfony');請將$arr數組的值用’,’分割並合併成字符串輸出?          echoimplode(,,$arr);

       2).$str = jack,james,tom,symfony; 請將$str用’,’分割,並把分割後的值放到$arr數組中?           $arr = explode(,,$str);

       3).$arr = array(3,7,2,1,d,abc);   請將$arr按照從大到小的順序排序,並保持其鍵值不變?           arsort($arr);print_r($arr);

       4).$mail = [email protected];    請將此郵箱的域(163.com)取出來並打印,看最多能寫出幾種方法?

              echo strstr($mail,'163');

              echo substr($mail,7);

              $arr =explode("@",$mail); echo $arr[1];

       5). 如果有一個字符串,該字符串是“123234345,”。請問如何切割掉這個字符串最後一個逗號?

       6). 獲取隨機數的函數有哪幾個?mt_rand() rand()哪個執行速度快?

 

41.頁面字符出現亂碼,怎麼解決?

       1.首先考慮當前文件是不是設置了字符集。查看是不是meta標籤中寫了charset,如果是php頁面還可以看看是不是

       header()函數中指定了charset

       例如:

       <metahttp-equiv="Content-Type" content="text/html;charset=utf-8" />

       header(“content-type:text/html;charset=utf-8”);

       2.如果設置了字符集(也就是charset),那麼判斷當前文件保存的編碼格式是否跟頁面設置的字符集保持一致,

       兩者必須保持統一;

       3.如果涉及到從數據庫提取數據,那麼判斷數據庫查詢時的字符集是否跟當前頁面設置的字符集一致,兩者必須統一,

       例如:mysql_query(set names utf8)

 

42. 正則表達式是什麼?php中有哪些常用的跟正則相關的函數?請寫出一個email的正則,中國手機號碼和座機號碼的正則表達式?

       正則表達式是用於描述字符排列模式的一種語法規則。正則表達式也叫做模式表達式。

       網站開發中正則表達式最常用於表單提交信息前的客戶端驗證。

       比如驗證用戶名是否輸入正確,密碼輸入是否符合要求,email、手機號碼等信息的輸入是否合法

       php中正則表達式主要用於字符串的分割、匹配、查找和替換操作。

      

       preg系列函數可以處理。具體有以下幾個:

       string preg_quote ( string str [, stringdelimiter] )

       轉義正則表達式字符正則表達式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > |:

       preg_replace -- 執行正則表達式的搜索和替換

       mixed preg_replace ( mixed pattern, mixedreplacement, mixed subject [, int limit]

       preg_replace_callback -- 用回調函數執行正則表達式的搜索和替換

       mixed preg_replace_callback ( mixedpattern, callback callback, mixed subject [, int limit] )

       preg_split -- 用正則表達式分割字符串

       array preg_split ( string pattern, stringsubject [, int limit [, int flags]] )

 

       常用的正則表達式寫法:

       中文:/^[\u4E00-\u9FA5]+$/

       手機號碼:/^(86)?0?1\d{10}$/

       EMAIL

       /^[\w-]+[\w-.]?@[\w-]+\.{1}[A-Za-z]{2,5}$/

       密碼(安全級別中):

       /^(\d+[A-Za-z]\w*|[A-Za-z]+\d\w*)$/

       密碼(安全級別高):

       /^(\d+[a-zA-Z~!@#$%^&(){}][\w~!@#$%^&(){}]*|[a-zA-Z~!@#$%^&(){}]+\d[\w~!@#$%^&(){}]*)$/

 

44.preg_replace() str_ireplace()兩個函數在使用上有什麼不同?preg_split()split()函數如何使用?

  preg_replace 執行正則表達式的搜索和替換

  str_ireplace str_replace() 的忽略大小寫版本   str_replace 子字符串替換

           preg_split用正則表達式分割字符串

       split 用正則表達式將字符串分割到數組中

 

45. 獲取當前時間戳的函數主要有哪些?用PHP打印出今天的時間,格式是2010-12-10 22:21:21

       PHP打印出前一天的時間格式是2010-12-10 22:21:21?如何把2010-12-2510:30:25變成unix時間戳?

       echo date ("Y-m-d H:i:s",strtotime(‘-1,days’));    

       date('Y-m-d H:i:s',time());  

       $unix_time = strtotime("2009-9-210:30:25");//變成unix時間戳

       echo date("Y-m-dH:i:s",$unix_time);//格式化爲正常時間格式

 

46.  url中用get傳值的時候,若中文出現亂碼,應該用哪個函數對中文進行編碼?

       用戶在網站表單提交數據的時候,爲了防止腳本***(比如用戶輸入<script>alert111);</script>),php端接收數據的時候,應該如何處理?

       使用urlencode()對中文進行編碼,使用urldecode()來解碼。   

       使用htmlspecialchars($_POST[title])來過濾表單傳參就可以避免腳本***。

 

48. 說說mysql_fetch_row()mysql_fetch_assoc()mysql_fetch_array之間有什麼區別?

       第一個是返回結果集中的一行作爲索引數組,第二個是返回關聯數組,而第三個既可以返回索引數組也可以返回關聯數組,取決於它的第二個參數 MYSQL_BOTH MYSQL_NUM  MYSQL_ASSOC 默認爲MYSQL_BOTH

       $sql =”select * from table1”;

       $result = mysql_query($sql);

       mysql_fetch_array($result, MYSQL_NUM);

 

49. 請說出目前學過的返回是資源的函數?

       答:       fopen(打開文件)

                imagecreatefromjpeg(png gif) JPEG 文件新建一圖像

                imagecreatetruecolor 新建一個真彩色圖像

                imagecopymerge 拷貝併合並圖像的一部分

                imagecopyresized  拷貝部分圖像並調整大小

                mysql_connect  打開一個到 MySQL 服務器的連接

              mysql_query();只有這執行select的時候成功,才返回資源,失敗返回FALSE

             

50. 打開、關閉文件分別是什麼函數?文件讀寫是什麼函數?刪除文件是哪個函數?

       判斷一個文件是否存在是哪個函數?新建目錄是哪個函數?

 

51. 文件上傳需要注意哪些細節?怎麼把文件保存到指定目錄?怎麼避免上傳文件重名問題?

       1.首現要在php.ini中開啓文件上傳;

       2.php.ini中有一個允許上傳的最大值,默認是2MB。必要的時候可以更改;

       3.上傳表單一定要記住在form標籤中寫上enctype="multipart/form-data"

       4. 提交方式 method 必須是 post

       5. 設定 type="file" 的表單控件;

       6.要注意上傳文件的大小MAX_FILE_SIZE、文件類型是否符合要求,上傳後存放的路徑是否存在。

可以通過上傳的文件名獲取到文件後綴,然後使用時間戳+文件後綴的方式爲文件重新命名,這樣就避免了重名。可以自己設置上傳文件的保存目錄,與文件名拼湊形成一個文件路徑,使用move_uploaded_file(),就可以完成將文件保存到指定目錄。

 

 

52.$_FILES是幾維數組?第一維和第二維的索引下標分別是什麼?批量上傳文件的時候需要注意什麼?

       二維數組。第一維是上傳控件的name,二維下標分別爲name/type/tmp_name/size/error.

 

53.header()函數主要的功能有哪些?使用過程中注意什麼?

       答:

    header()發送http頭信息

   -header("content-type:text/html;charset=utf-8");-------------------//當前頁面輸出內容是html,編碼爲utf-8格式

   -<meta http-equiv="Content-Type"content="text/html; charset=utf-8" />

   -header("content-type:image/png gifjpeg");----------------------------------//當前頁面輸出內容的格式是圖片

  -header("refresh:5;url=http://www.1004javag.com/five/string.php");--//頁面5秒後要跳轉到新網址

-header("location:http://1004javag.com/five/string.php");-----------//頁面重定向

54. 文件下載的時候如果使用header()函數?

       答:header("content-type:application/octet-stream;charset=UTF-8"); //在這裏加utf-8和在上面定義有什麼區別?、??

             header("accept-ranges: bytes");

            header("accept-length:".filesize($filedir.$filename));

            header("content-disposition:attachment; filename=".$filedir.$filename);

 

 

55. 什麼是ajaxajax的原理是什麼?ajax的核心技術是什麼?ajax的優缺點是什麼?

       ajaxasynchronous javascript and xml的縮寫,是javascriptxmlcssDOM等多個技術的組合。     '$'jQuery的別名.

 

  頁面中用戶的請求通過ajax引擎異步地與服務器進行通信,服務器將請求的結果返回給這個ajax引擎,

  最後由這個ajax引擎來決定將返回的數據顯示到頁面中的指定位置。Ajax最終實現了在一個頁面的指定位置可以加載另一個頁面所有的輸出內容。

       這樣就實現了一個靜態頁面也能獲取到數據庫中的返回數據信息了。所以ajax技術實現了一個靜態網頁在不刷新整個頁面的情況下與服務器通信,

       減少了用戶等待時間,同時也從而降低了網絡流量,增強了客戶體驗的友好程度。

      

 

       Ajax的優點是:

       1. 減輕了服務器端負擔,將一部分以前由服務器負擔的工作轉移到客戶端執行,利用客戶端閒置的資源進行處理;

       2. 在只局部刷新的情況下更新頁面,增加了頁面反應速度,使用戶體驗更友好。

       Ajax的缺點是不利於seo推廣優化,因爲搜索引擎無法直接訪問到ajax請求的內容。

       ajax的核心技術是XMLHttpRequest,它是javascript中的一個對象。

 

56. jquery是什麼?jquery簡化ajax後的方法有哪些?

       jQueryJavascript的一種框架。

       $.get(),$.post(),$.ajax()$jQuery對象的別名。

 

       代碼如下:

       $.post(異步訪問的url地址 , {'參數名' : 參數值} , function(msg){

              $("#result").html(msg);

       });

      

       $.get(異步訪問的url地址 , {'參數名' : 參數值} , function(msg){

              $("#result").html(msg);

       });

 

       $.ajax({

              type: "post",

              url: loadUrl,

              cache:false,

              data: "參數名="+ 參數值,

              success: function(msg) {

                     $("#result").html(msg);

              }

       });

 

 

57. 什麼是會話控制?

       簡單地說會話控制就是跟蹤和識別用戶信息的機制。會話控制的思想就是能夠在網站中跟蹤一個變量,通過這個變量,系統能識別出相應的用戶信息,根據這個用戶信息可以得知用戶權限,從而展示給用戶適合於其相應權限的頁面內容。目前最主要的會話跟蹤方式有cookiesession

 

58. 會話跟蹤的基本步驟

       1).訪問與當前請求相關的會話對象  2).查找與會話相關的信息

       3).存儲會話信息    4).廢棄會話數據

 

59. 使用cookie的注意事項有哪些?

       1 setcookie()之前不可以有任何頁面輸出,就是空格,空白行也不可以;

       2 setcookie()後,在當前頁面調用$_COOKIE['cookiename']不會有輸出,必須刷新或到下一個頁面纔可以看到cookie值;

       3不同的瀏覽器對cookie處理不同,客戶端可以禁用cookie,瀏覽器也可以閒置cookie的數量,一個瀏覽器能創建的cookie數量最多300個,並且每個不可以超過4kb

       每個web站點能設置的cookie總數不能超過20個。

       4 cookie是保存在客戶端的,用戶禁用了cookie,那麼setcookie就不會起作用了。所以不可以過度依賴cookie

 

60. 使用session的時候,通過什麼來表示當前用戶,從而與其他用戶進行區分?

       sessionid,通過session_id()函數可以取得當前的session_id

 

61.sessioncookie的使用步驟分別是什麼?什麼是sesssioncookie的生命週期?sessioncookie的區別是什麼?

       cookie是保存在客戶端機器的,對於未設置過期時間的cookiecookie值會保存在機器的內存中,只要關閉瀏覽器則cookie自動消失。如果設置了cookie的過期時間,那麼瀏覽器會把cookie以文本文件的形式保存到硬盤中,當再次打開瀏覽器時cookie值依然有效。     

       session是把用戶需要存儲的信息保存在服務器端。每個用戶的session信息就像是鍵值對一樣存儲在服務器端,其中的鍵就是sessionid,而值就是用戶需要存儲信息。服務器就是通過sessionid來區分存儲的session信息是哪個用戶的。      

       兩者最大的區別就是session存儲在服務器端,而cookie是在客戶端。session安全性更高,而cookie安全性弱。

       sessionweb開發中具有非常重要的份量。它可以將用戶正確登錄後的信息記錄到服務器的內存中,當用戶以此身份訪問網站的管理後臺時,無需再次登錄即可得到身份確認。而沒有正確登錄的用戶則不分配session空間,即便輸入了管理後臺的訪問地址也不能看到頁面內容。通過session確定了用戶對頁面的操作權限。   

       使用session的步驟:

       1. 啓動session:使用session_start()函數來啓動。

       2. 註冊會話:直接給$_SESSION數組添加元素即可。

       3. 使用會話:判斷session是否爲空或者是否已經註冊,如果已經存在則像普通數組使用即可。

       4. 刪除會話:

              1.可以使用unset刪除單個session

              2.使用$_SESSION=array()的方式,一次註銷所有的會話變量;

              3.使用session_destroy()函數來徹底銷燬session

       cookie怎麼使用?

       1. 記錄用戶訪問的部分信息

       2. 在頁面間傳遞變量

       3. 將所查看的internet頁存儲在cookies臨時文件夾中,可以提高以後的瀏覽速度。

       創建cookiesetcookie(string cookiename , string value, int expire);

       讀取cookie:通過超級全局數組$_COOKIE來讀取瀏覽器端的cookie的值。

       刪除cookie:有兩種方法

       1.手工刪除方法:

       右擊瀏覽器屬性,可以看到刪除cookies,執行操作即可將所有cookie文件刪除。

       2.setcookie()方法:

       跟設置cookie的方法一樣,不過此時將cookie的值設置爲空,有效時間爲0或小於當前時間戳。

 

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

       一個瀏覽器最多可以產生多少個cookie,每個cookie文件最大不能超過多少?

       setcookie(‘username’,’jack’,time()+7*24*3600);

       最多可以產生20cookie,每個最多不超過4K

 

63. 設置或讀取session之前,需要做什麼?

       可以直接在php.ini中開啓session.auto_start = 1或者在頁面頭部用session_start();

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

 

64. 在實際開發中,session在哪些場合使用?

       session用來存儲用戶登錄信息和用在跨頁面傳值。

       1)常用在用戶登錄成功後,將用戶登錄信息賦值給session

       2)用在驗證碼圖片生成,當隨機碼生成後賦值給session

 

65. 註銷session會話的形式有幾種?

       unset()  $_SESSION=array();  session_destroy();

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章