下面的两幅图产生的效果都是一样的,只不过一个用了request()函数,一个用了Request类
因为Request是单例模式,所以只能通过instance这个方法来获取这个实例
从形参中就开始对象化,也是可以了。输出结果和上面一样。
上面所学内容是三种方式获得thinkphp5的请求对象。下面的内容将是了解请求对象在哪里创建的以及请求对象中有哪些参数。
上面的那种参数就实例化的方法,原理如下图,由于所有的访问都要经过入口文件,然后载入start.php,最后执行run方法,在执行run方法的时候,就已经像下图这样实例化了。因此上面的用法可以成功使用。
这里我有点搞不懂了,为什么在浏览器输入localhost/index/index/index/type/5.html?id=10
而下面这段代码的$request->pathinfo()输出的却是index/index/index/type/5.html呢?难道说type是$request对象中的一个成员?这个pathinfo()输出不包含?后面的部分。
为了安全,可以在配置文件中设置,将.html给隐藏起来,这样攻击者就无法知晓目标网站是用什么语言开发的了。
$request->path()返回的是没有.html后缀的路径
输出结果如下:
下面是一些常用的方法:
若想得到当前的session值,并且输出出来,那么就写上:
dump($request->session());
只要当前的浏览器中有session,就会输出出来。
若当前浏览器中的session删除了,那么可以再设置一下session值就可以了
仅在代码中写上是远远不够的,还需要做一些配置。前几节的配置文件路径虽然改变了,但是thinkphp5的默认配置还是起作用的。我们创建的conf/config.php只不过可以利用覆盖的方式来让设置更加的规范、有备份。
所以,进行下面的配置:
先将默认配置中的session部分复制粘贴到config.php中
然后删除了图中框出来的部分,httponly将cookie限制在了http协议中,secure是啥来着,我忘了。。。哦对,是让cookie只限于https加密传输。删除了下面这两项,这个session组就覆盖了默认的session设置,系统就不会认为我的session设置中有这两项了。
之后再回到浏览器,就发现之前设置的session值起作用了,即使将我们上面写的session('name','wuyunlong')给注释掉。效果依旧不变。
由于设置了session,所以就能得到cookie,这是什么鬼?还有session和cookie是什么关系?原因如下:
服务器端为了辨别独一无二的用户,会给特定的用户创建特定的session,但是为了辨别独一无二的客户端,在第一次http请求的时候,服务器会告诉客户端要在cookie里面记录一下sessionID,每次请求把这个会话ID发给服务器,服务器就知道客户端是谁了。
由于有session,所以在cookie中有sessionID,如下图:
最后补充一下其他的用法:
如果想深入了解一下Request类的用法,可以去看Request.php文件。里面有详细的代码记录。