您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“PHP中如何完成Session的設(shè)置、獲取和刪除”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
在之前的文章中,我們介紹了客戶端用來儲存用戶數(shù)據(jù)的cookie
,本篇我們來看一下在PHP中占有非常重要地位的session
,session是一種服務(wù)器端的機制,也是用來保存信息的,相比于保存在客戶端的cookie,保存在服務(wù)器端的session用戶是無法禁用的,同一個客戶端每次和服務(wù)端交互時,不需要每次都傳回所有的cookie值,只需要傳回一個ID就可以了,這個ID是第一次訪問服務(wù)器的時候生成的,并且是唯一的。
那接下來就來看一看到底什么是session,應(yīng)該怎樣去設(shè)置、獲取和刪除session吧
什么是session
session中文意思是會話,它用來儲存使用者的相關(guān)資料的,這與cookie類似,例如用戶名、個性化設(shè)置等等,與cookie不同的是,cookie是將資料保存在客戶端的電腦中,用戶可以禁用;而session是將數(shù)據(jù)保存在服務(wù)器系統(tǒng)下。網(wǎng)頁是無狀態(tài)的程序連接,無法記錄用戶的狀態(tài),因此通過session來記錄用戶的相關(guān)信息就顯得尤為重要。
當(dāng)開啟一個session是,PHP會隨機的創(chuàng)建一個sessionID
,每個用戶的sessionID是唯一的。這個sessionID在客戶端與服務(wù)器端都會有保存的位置,保存在客戶端會使用cookie的指定目錄里;在服務(wù)器端回憶文本的形式保存到指定的session目錄里。
與cookie相比,session是有很多優(yōu)勢的:
因為session的數(shù)據(jù)不會在客戶端與服務(wù)器端來回的反復(fù)傳遞,所以通常情況下session還是更安全的;session能夠存儲的信息比cookie要多很多;用戶可以禁用cookie,但是有方法能夠是session正常工作。
了解了什么是session后,接下來看一看應(yīng)該怎樣去開啟session。
開啟session
不同于cookie,使用cookie可以直接創(chuàng)建,而在使用session之前必須先啟動,目的是為了讓PHP中的核心程序能夠?qū)ession相關(guān)的內(nèi)建環(huán)境預(yù)先加載到內(nèi)存中。
在PHP中通過session_start()
函數(shù)可以實現(xiàn)開啟session的目的,函數(shù)session_start()的語法格式如下:
session_start ([array $options = array()])
其中需要注意的是:
$options
是一個可選函數(shù),是一個關(guān)聯(lián)數(shù)組,并且這個數(shù)組中的鍵不需要包含session.前綴。
示例如下:
<?php session_start([ 'cookie_lifetime' => 60*60*24, // 設(shè)置 cookie 的有效時間為 1 天 ]); echo 'Session ID 為:'.$_COOKIE['PHPSESSID']; ?>
輸出結(jié)果:
需要注意的是:調(diào)用 session_start()
函數(shù)會生成一個唯一的 Session ID,并保存在瀏覽器的 Cookie 中,默認名稱為“PHPSESSID”。同時,在本地目錄中生成一個以“sess_”加上 Session ID 組成的 Session 文件,用來存儲 Session 中的數(shù)據(jù),輸出結(jié)果:
通過上述實例,已經(jīng)了解到了應(yīng)該怎樣去開啟session,那接下來看一下應(yīng)該怎樣去設(shè)置和獲取session
設(shè)置和獲取session
在上文中,啟動了session之后,想要使用session變量,還需要經(jīng)過設(shè)置和獲取session中的數(shù)據(jù),想要完成這些還需要通過$_SESSION
數(shù)組來完成。使用$_SESSION之前必須要先試用session_start()
函數(shù)來開啟session才可以。
$_SESSION
為一個關(guān)聯(lián)數(shù)組,和普通關(guān)聯(lián)數(shù)組鍵值對的含義相同。設(shè)置 Session 的語法格式如下:
$_SESSION[名稱] = 值;
示例如下:
<?php session_start(); $str = '好好學(xué)習(xí)'; $arr = ['Session','$_SESSION']; $_SESSION['study'] = $str; $_SESSION['study1'] = '天天向上'; $_SESSION['title'] = $arr; foreach ($_SESSION as $key => $value) { if(is_array($value)){ echo $key.':'; print_r($value); }else{ echo $key.' = '.$value.'<br>'; } } ?>
輸出結(jié)果:
運行后需要注意的是:會將這幾個變量或數(shù)組保存到 $_SESSION 中,還會被保存到服務(wù)器端由“sess_”和 Session ID 所命名的文件中,這個文件的位置可以通過修改 php.ini 配置文件或使用 session.save_path 配置。
上文中已經(jīng)了解了怎樣開啟、設(shè)置和獲取session,接下來看一下應(yīng)該怎樣刪除session。
刪除單個session
刪除單個session元素需要通過unset()
函數(shù),該函數(shù)可以釋放指定的變量,相當(dāng)于直接注銷掉數(shù)組中的元素,他的語法格式如下:
unset(mixed $var [, mixed $...])
其中需要注意的是:
$var
為要釋放的變量,unset()
函數(shù)可以接收多個參數(shù),參數(shù)之間使用,
分隔。
實例如下:
<?php session_start(); echo '<pre>'; $str = '好好學(xué)習(xí)'; $arr = ['刪除 Session','$_SESSION']; $_SESSION['study'] = $str; $_SESSION['study1'] = '天天向上'; $_SESSION['title'] = $arr; echo '定義一個 Session,如下所示:<br>'; print_r($_SESSION); echo '刪除 Session 中名為 title 的元素:<br>'; unset($_SESSION['title']); print_r($_SESSION); ?>
輸出結(jié)果:
如此便通過unset()函數(shù)完成了刪除session單個元素了。
刪除session多個元素
如果想要一次性刪除多個 Session 元素,即一次注銷所有的會話變量,可以通過將一個空的數(shù)組賦值給 $_SESSION
來實現(xiàn)
實例如下:
<?php session_start(); echo '<pre>'; $str = '好好學(xué)習(xí)'; $arr = ['刪除 Session','$_SESSION']; $_SESSION['study'] = $str; $_SESSION['study1'] = '天天向上'; $_SESSION['title'] = $arr; echo '定義一個 Session,如下所示:<br>'; print_r($_SESSION); echo '刪除 Session 中名為 title 的元素:<br>'; $_SESSION = array(); print_r($_SESSION); ?>
通過將一個空的數(shù)組賦值給 $_SESSION 輸出結(jié)果:
還有一種方法就是通過session_unset() 函數(shù)來釋放session中的所有元素,實例如下:
<?php session_start(); echo '<pre>'; $str = '好好學(xué)習(xí)'; $arr = ['刪除 Session','$_SESSION']; $_SESSION['study'] = $str; $_SESSION['study1'] = '天天向上'; $_SESSION['title'] = $arr; echo '定義一個 Session,如下所示:<br>'; print_r($_SESSION); echo '刪除 Session 中名為 title 的元素:<br>'; session_unset(); print_r($_SESSION); ?>
輸出結(jié)果與上述實例的結(jié)果相同,由此我們便通過兩種方法可以刪除session多個元素了。
“PHP中如何完成Session的設(shè)置、獲取和刪除”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。