下面的兩幅圖產(chǎn)生的效果都是一樣的,只不過一個(gè)用了request()函數(shù),一個(gè)用了Request類
因?yàn)镽equest是單例模式,所以只能通過instance這個(gè)方法來獲取這個(gè)實(shí)例
從形參中就開始對象化,也是可以了。輸出結(jié)果和上面一樣。
上面所學(xué)內(nèi)容是三種方式獲得thinkphp5的請求對象。下面的內(nèi)容將是了解請求對象在哪里創(chuàng)建的以及請求對象中有哪些參數(shù)。
上面的那種參數(shù)就實(shí)例化的方法,原理如下圖,由于所有的訪問都要經(jīng)過入口文件,然后載入start.php,最后執(zhí)行run方法,在執(zhí)行run方法的時(shí)候,就已經(jīng)像下圖這樣實(shí)例化了。因此上面的用法可以成功使用。
這里我有點(diǎn)搞不懂了,為什么在瀏覽器輸入localhost/index/index/index/type/5.html?id=10
而下面這段代碼的$request->pathinfo()輸出的卻是index/index/index/type/5.html呢?難道說type是$request對象中的一個(gè)成員?這個(gè)pathinfo()輸出不包含?后面的部分。
為了安全,可以在配置文件中設(shè)置,將.html給隱藏起來,這樣攻擊者就無法知曉目標(biāo)網(wǎng)站是用什么語言開發(fā)的了。
$request->path()返回的是沒有.html后綴的路徑
輸出結(jié)果如下:
下面是一些常用的方法:
若想得到當(dāng)前的session值,并且輸出出來,那么就寫上:
dump($request->session());
只要當(dāng)前的瀏覽器中有session,就會(huì)輸出出來。
若當(dāng)前瀏覽器中的session刪除了,那么可以再設(shè)置一下session值就可以了
僅在代碼中寫上是遠(yuǎn)遠(yuǎn)不夠的,還需要做一些配置。前幾節(jié)的配置文件路徑雖然改變了,但是thinkphp5的默認(rèn)配置還是起作用的。我們創(chuàng)建的conf/config.php只不過可以利用覆蓋的方式來讓設(shè)置更加的規(guī)范、有備份。
所以,進(jìn)行下面的配置:
先將默認(rèn)配置中的session部分復(fù)制粘貼到config.php中
然后刪除了圖中框出來的部分,httponly將cookie限制在了http協(xié)議中,secure是啥來著,我忘了。。。哦對,是讓cookie只限于https加密傳輸。刪除了下面這兩項(xiàng),這個(gè)session組就覆蓋了默認(rèn)的session設(shè)置,系統(tǒng)就不會(huì)認(rèn)為我的session設(shè)置中有這兩項(xiàng)了。
之后再回到瀏覽器,就發(fā)現(xiàn)之前設(shè)置的session值起作用了,即使將我們上面寫的session('name','wuyunlong')給注釋掉。效果依舊不變。
由于設(shè)置了session,所以就能得到cookie,這是什么鬼?還有session和cookie是什么關(guān)系?原因如下:
服務(wù)器端為了辨別獨(dú)一無二的用戶,會(huì)給特定的用戶創(chuàng)建特定的session,但是為了辨別獨(dú)一無二的客戶端,在第一次http請求的時(shí)候,服務(wù)器會(huì)告訴客戶端要在cookie里面記錄一下sessionID,每次請求把這個(gè)會(huì)話ID發(fā)給服務(wù)器,服務(wù)器就知道客戶端是誰了。
由于有session,所以在cookie中有sessionID,如下圖:
最后補(bǔ)充一下其他的用法:
如果想深入了解一下Request類的用法,可以去看Request.php文件。里面有詳細(xì)的代碼記錄。