-
使用session來存儲用戶的登錄信息 session可以用來存儲多種類型的數(shù)據(jù),因此具有很多的用途,常用來存儲用戶的登錄信息,購物車數(shù)據(jù),或者一些臨時使用的暫存數(shù)據(jù)等。 用戶在登錄成功以后,通??梢詫⒂脩舻男畔⒋鎯υ趕ession中,一般的會單獨的將一些重要的字段單獨存儲,然后所有的用戶信息獨立存儲。 $_SESSION['uid'] = $userinfo['uid']; $_SESSION['userinfo'] = $userinfo; 一般來說,登錄信息既可以存儲在sessioin中,也可以存儲在cookie中,他們之間的差別在于session可以方便的存取多種數(shù)據(jù)類型,而cookie只支持字符串類型,同時對于一些安全性比較高的數(shù)據(jù),cookie需要進行格式化與加密存儲,而session存儲在服務(wù)端則安全性較高。查看全部
-
刪除與銷毀session 刪除某個session值可以使用PHP的unset函數(shù),刪除后就會從全局變量$_SESSION中去除,無法訪問。 session_start(); $_SESSION['name'] = 'jobs'; unset($_SESSION['name']); echo $_SESSION['name']; //提示name不存在 如果要刪除所有的session,可以使用session_destroy函數(shù)銷毀當(dāng)前session,session_destroy會刪除所有數(shù)據(jù),但是session_id仍然存在。 session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); session_destroy(); 值得注意的是,session_destroy并不會立即的銷毀全局變量$_SESSION中的值,只有當(dāng)下次再訪問的時候,$_SESSION才為空,因此如果需要立即銷毀$_SESSION,可以使用unset函數(shù)。 session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); unset($_SESSION); session_destroy(); var_dump($_SESSION); //此時已為空 如果需要同時銷毀cookie中的session_id,通常在用戶退出的時候可能會用到,則還需要顯式的調(diào)用setcookie方法刪除session_id的cookie值。查看全部
-
使用session 在PHP中使用session非常簡單,先執(zhí)行session_start方法開啟session,然后通過全局變量$_SESSION進行session的讀寫。 session_start(); $_SESSION['test'] = time(); var_dump($_SESSION); session會自動的對要設(shè)置的值進行encode與decode,因此session可以支持任意數(shù)據(jù)類型,包括數(shù)據(jù)與對象等。 session_start(); $_SESSION['ary'] = array('name' => 'jobs'); $_SESSION['obj'] = new stdClass(); var_dump($_SESSION); 默認情況下,session是以文件形式存儲在服務(wù)器上的,因此當(dāng)一個頁面開啟了session之后,會獨占這個session文件,這樣會導(dǎo)致當(dāng)前用戶的其他并發(fā)訪問無法執(zhí)行而等待??梢圆捎镁彺婊蛘邤?shù)據(jù)庫的形式存儲來解決這個問題查看全部
-
session與cookie的異同 cookie將數(shù)據(jù)存儲在客戶端,建立起用戶與服務(wù)器之間的聯(lián)系,通??梢越鉀Q很多問題,但是cookie仍然具有一些局限: cookie相對不是太安全,容易被盜用導(dǎo)致cookie欺騙 單個cookie的值最大只能存儲4k 每次請求都要進行網(wǎng)絡(luò)傳輸,占用帶寬 session是將用戶的會話數(shù)據(jù)存儲在服務(wù)端,沒有大小限制,通過一個session_id進行用戶識別,PHP默認情況下session id是通過cookie來保存的,因此從某種程度上來說,seesion依賴于cookie。但這不是絕對的,session id也可以通過參數(shù)來實現(xiàn),只要能將session id傳遞到服務(wù)端進行識別的機制都可以使用session。 任務(wù) 了解cookie與session的異同,以及各自的應(yīng)用場景。 index.php <?php //開始使用session session_start(); //設(shè)置一個session $_SESSION['test'] = time(); //顯示當(dāng)前的session_id echo "session_id:".session_id(); echo "<br>"; //讀取session值 echo $_SESSION['test']; //銷毀一個session unset($_SESSION['test']); echo "<br>"; var_dump($_SESSION);查看全部
-
cookie的有效路徑 cookie中的路徑用來控制設(shè)置的cookie在哪個路徑下有效,默認為'/',在所有路徑下都有,當(dāng)設(shè)定了其他路徑之后,則只在設(shè)定的路徑以及子路徑下有效,例如: setcookie('test', time(), 0, '/path'); 上面的設(shè)置會使test在/path以及子路徑/path/abc下都有效,但是在根目錄下就讀取不到test的cookie值。 一般情況下,大多是使用所有路徑的,只有在極少數(shù)有特殊需求的時候,會設(shè)置路徑,這種情況下只在指定的路徑中才會傳遞cookie值,可以節(jié)省數(shù)據(jù)的傳輸,增強安全性以及提高性能。 當(dāng)我們設(shè)置了有效路徑的時候,不在當(dāng)前路徑的時候則看不到當(dāng)前cookie。 setcookie('test', '1',0, '/path'); var_dump($_COOKIE['test']);查看全部
-
cookie的刪除與過期時間 通過前面的章節(jié),我們了解了設(shè)置cookie的函數(shù),但是我們卻發(fā)現(xiàn)php中沒有刪除Cookie的函數(shù),在PHP中刪除cookie也是采用setcookie函數(shù)來實現(xiàn)。 setcookie('test', '', time()-1); 可以看到將cookie的過期時間設(shè)置到當(dāng)前時間之前,則該cookie會自動失效,也就達到了刪除cookie的目的。之所以這么設(shè)計是因為cookie是通過HTTP的標(biāo)頭來傳遞的,客戶端根據(jù)服務(wù)端返回的Set-Cookie段來進行cookie的設(shè)置,如果刪除cookie需要使用新的Del-Cookie來實現(xiàn),則HTTP頭就會變得復(fù)雜,實際上僅通過Set-Cookie就可以簡單明了的實現(xiàn)Cookie的設(shè)置、更新與刪除。 了解原理以后,我們也可以直接通過header來刪除cookie。 header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1)); 這里用到了gmdate,用來生成格林威治標(biāo)準時間,以便排除時差的影響。查看全部
-
設(shè)置cookie PHP設(shè)置Cookie最常用的方法就是使用setcookie函數(shù),setcookie具有7個可選參數(shù),我們常用到的為前5個: name( Cookie名)可以通過$_COOKIE['name'] 進行訪問 value(Cookie的值) expire(過期時間)Unix時間戳格式,默認為0,表示瀏覽器關(guān)閉即失效 path(有效路徑)如果路徑設(shè)置為'/',則整個網(wǎng)站都有效 domain(有效域)默認整個域名都有效,如果設(shè)置了'idcbgp.cn',則只在www子域中有效 $value = 'test'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); //有效期一小時 setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //設(shè)置路徑與域 PHP中還有一個設(shè)置Cookie的函數(shù)setrawcookie,setrawcookie跟setcookie基本一樣,唯一的不同就是value值不會自動的進行urlencode,因此在需要的時候要手動的進行urlencode。 setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365); 因為Cookie是通過HTTP標(biāo)頭進行設(shè)置的,所以也可以直接使用header方法進行設(shè)置。 header("Set-Cookie:cookie_name=value");查看全部
-
cookie簡介 Cookie是存儲在客戶端瀏覽器中的數(shù)據(jù),我們通過Cookie來跟蹤與存儲用戶數(shù)據(jù)。一般情況下,Cookie通過HTTP headers從服務(wù)端返回到客戶端。多數(shù)web程序都支持Cookie的操作,因為Cookie是存在于HTTP的標(biāo)頭之中,所以必須在其他信息輸出以前進行設(shè)置,類似于header函數(shù)的使用限制。 PHP通過setcookie函數(shù)進行Cookie的設(shè)置,任何從瀏覽器發(fā)回的Cookie,PHP都會自動的將他存儲在$_COOKIE的全局變量之中,因此我們可以通過$_COOKIE['key']的形式來讀取某個Cookie值。 PHP中的Cookie具有非常廣泛的使用,經(jīng)常用來存儲用戶的登錄信息,購物車等,且在使用會話Session時通常使用Cookie來存儲會話id來識別用戶,Cookie具備有效期,當(dāng)有效期結(jié)束之后,Cookie會自動的從客戶端刪除。同時為了進行安全控制,Cookie還可以設(shè)置域跟路徑,查看全部
-
正則匹配常用案例 正則匹配常用在表單驗證上,一些字段會有一定的格式要求,比如用戶名一般都要求必須是字母、數(shù)字或下劃線組成,郵箱、電話等也都有自己的規(guī)則,因此使用正則表達式可以很好的對這些字段進行驗證。 我們通過案例來看一下一般的用戶注冊頁,都怎樣對字段進行驗證。 任務(wù) 了解正則匹配的常規(guī)用途,以及如何對用戶注冊信息進行驗證。嘗試修改各字段的值來觀察正則表達式的驗證效果。 index.php <?php $user = array( 'name' => 'spark1985', 'email' => 'spark@imooc.com', 'mobile' => '13312345678' ); //進行一般性驗證 if (empty($user)) { die('用戶信息不能為空'); } if (strlen($user['name']) < 6) { die('用戶名長度最少為6位'); } //用戶名必須為字母、數(shù)字與下劃線 if (!preg_match('/^\w+$/i', $user['name'])) { die('用戶名不合法'); } //驗證郵箱格式是否正確 if (!preg_match('/^[\w\.]+@\w+\.\w+$/i', $user['email'])) { die('郵箱不合法'); } //手機號必須為11位數(shù)字,且為1開頭 if (!preg_match('/^1\d{10}$/i', $user['mobile'])) { die('手機號不合法'); } echo '用戶信息驗證成功';查看全部
-
PHP數(shù)組之foreach循環(huán)訪問關(guān)聯(lián)數(shù)組里的值 foreach循環(huán)可以將數(shù)組里的所有值都訪問到,下面我們展示下,用foreach循環(huán)訪問關(guān)聯(lián)數(shù)組里的值。 例如: $fruit=array('apple'=>"蘋果",'banana'=>"香蕉",'pineapple'=>"菠蘿"); foreach($fruit as $k=>$v){ echo '<br>水果的英文鍵名:'.$k.',對應(yīng)的值是:'.$v; }查看全部
-
PHP數(shù)組之訪問關(guān)聯(lián)數(shù)組內(nèi)容 用數(shù)組變量的名字后跟中括號+鍵的方式來訪問數(shù)組中的值,鍵使用單引號或者雙引號括起來。 比如: $fruit = array('apple'=>"蘋果",'banana'=>"香蕉",'pineapple'=>"菠蘿"); $fruit0 = $fruit['banana']; print_r($fruit0); 上面代碼的作用:先把一個數(shù)組$fruit中鍵為banana字符串的值取出來然后賦給一個另一個變量$fruit0,最后輸出變量值。查看全部
-
PHP數(shù)組之關(guān)聯(lián)數(shù)組賦值 關(guān)聯(lián)數(shù)組賦值有兩種方式: 第一種:用數(shù)組變量的名字后面跟一個中括號的方式賦值,當(dāng)然,關(guān)聯(lián)數(shù)組中,中括號內(nèi)的鍵一定是字符串。比如,$arr['apple']='蘋果'; 第二種:用array()創(chuàng)建一個空數(shù)組,使用=>符號來分隔鍵和值,左側(cè)表示鍵,右側(cè)表示值。當(dāng)然,關(guān)聯(lián)數(shù)組中,鍵一定是字符串。比如,array('apple'=>'蘋果');查看全部
-
PHP數(shù)組之關(guān)聯(lián)數(shù)組初始化 回顧下前面介紹的內(nèi)容,PHP有兩種數(shù)組:索引數(shù)組、關(guān)聯(lián)數(shù)組。 索引和關(guān)聯(lián)兩個詞都是針對數(shù)組的鍵而言的。 先介紹下,關(guān)聯(lián)數(shù)組是指數(shù)組的鍵是字符串的數(shù)組。 可以使用下面代碼實現(xiàn): $fruit = array( 'apple'=>"蘋果", 'banana'=>"香蕉", 'pineapple'=>"菠蘿" ); 可以使用print_r($fruit);語句輸出數(shù)組鍵及對應(yīng)的值。查看全部
-
PHP數(shù)組之foreach循環(huán)訪問索引數(shù)組里的值 foreach循環(huán)可以將數(shù)組里的所有值都訪問到,下面我們展示下,用foreach循環(huán)訪問索引數(shù)組里的值。 例如: $fruit=array('蘋果','香蕉','菠蘿'); foreach($fruit as $k=>$v){ echo '<br>第'.$k.'值是:'.$v; }查看全部
-
PHP數(shù)組之for循環(huán)訪問索引數(shù)組里的值 for循環(huán)可以將數(shù)組里的所有值都訪問到,下面我們展示下,用for循環(huán)訪問索引數(shù)組里的值。 例如: $fruit=array('蘋果','香蕉','菠蘿'); for($i=0; $i<3; $i++){ echo '<br>數(shù)組第'.$i.'值是:'.$fruit[$i];查看全部
舉報
0/150
提交
取消