PHP会话技术

为什么要使用会话技术

我们在浏览网站的时候,访问每一个Web页面都是使用HTTP协议来实现的。由于HTTP协议是一个无状态的协议。这就会导致当一个用户请求一个页面以后,再请求该网站的其他页面,HTTP协议并不能告诉服务器这是同一个用户。

因为HTTP协议是无状态的,所以我们无法跟踪用户。所以一定程度上会影响我们的开发,例如:登录模块,如果不能跟踪用户,将会导致访问该网站的每一个都要求我们重新登录。还有就是购物车也是需要使用到用户跟踪

用户跟踪的方式

所谓用户跟踪,其实就是向另外一个网页传递数据。

PHP里面提供了3种方式来实现网页之间传递数据

①  可以通过超链接或者header()函数在URL后面附加参数的形式来传递数据。

② 使用cookie将用户的状态信息存储在客户端的计算机里面。

③ 使用session将用户的状态信息存储在服务器端的计算机里面。

如果用户的状态信息全部都是通过附加在URL后面来进行传递,那么,开发工作量是非常大。所以我们一般选用Cookie或者Session技术。

Cookie的应用

①  Cookie的概述

在现实生活中,如果在商场里面购买东西,一般会有一张会员卡。这张会员卡就记录用户的相关信息(姓名,联系电话,积分信息)。下一次你再去商场的时候,只要拿出会员卡,商场这一边就知道你是之前来过的用户,通过这张积分卡,就可以读出你所有的信息。

Cookie就类似于这张会员卡,当用户第一次访问网站的时候,服务器在返回HTTP响应的时候顺带将Cookie(小饼干)发送到客户端保存起来(相当于商场将会员卡发给了你)。下一次当用户再次访问该网站的其他页面的时候,在HTTP的请求里面就会自动的将客户端的Cookie信息给带过去。通过这种方式,服务器端就可以识别是否是同一个用户。

②  向客户端的计算中设置Cookie

PHP里面,提供了一个叫做setCookie的函数,可以用客户端发送cookie信息

Bool SetCookie(Cookie的名称,Cookie的值,Cookie的生存时间,Cookie有效的目录,Cookie有效的域名,是否通过安全协议HTTPS来传输Cookie)

 

Cookie的生存时间是以当前的时间戳来计算的

 

如果Cookie设置成功,则返回true

 

创建cookie示例:

 

当我们访问test.php的时候,http响应里面就会设置这个cookie信息

 

 

示例2

 

 

注意点:浏览器之间的cookie不是共用的。

 

 

③  PHP里面读取Cookie信息

PHP里面提供了一个$_COOKIE[ ]这是一个超全局数组。该超全局数据用来存放从客户端发送过来的cookie信息。

通过test.Php设置了cookie信息

 

访问hello.php页面的时候,我们会发现http请求里面自动就添加了这个cookie信息

 

效果:

 

 

 

如果没有写过期时间,cookie的有效期是多久?

如果没有书写cookie的过期时间,那么默认cookie将会在浏览器关闭时过期。

 

 

④  以数组的形式设置cookie

这个一般用于一组信息的时候,发送的形式如下:

 

如何获取数组形式的cookie

 

⑤ 删除cookie

如何手动的删除cookie,方法很简单,还是调用setCookie函数,只需要value为空,然后时间小于当前的系统时间即可

 

效果:

 

 

还有一种方法删除cookie,只设置第一个参数,其他参数全部省略

这一种方式cookie并没有被删除,只是被置空了。

 

 

课堂练习:

用户第一次登陆网页,显示【你是首次访问网站】

之后访问网页,将会显示【你上次登陆的时间】有效期为7

 

 

Session的应用

Session翻译成中文是会话的意思。虽然cookie可以解决前面我们所说的问题。但是cookie有一个严重的问题,那就是存储于客户端,所以安全性不高。而且用户有权利阻止cookie使用如果用户一旦关闭cookie,那么Web服务器无法再使用cookie来跟踪用户。所以,session技术出现了。Session就是将用户的状态信息保存在服务器端。

如果说cookie是一张会员卡,这张会员卡由用户自己保存。如果用户的会员卡丢失,用户就不能再证明自己的身份。但是session就是将这张会员卡由商场方来保存,无需用户保存,用户只需要提供卡号就可以了。

① 设置session

Session是一种服务器端技术。默认session的有效期从开始访问网站开始,到断开和网页的链接。

使用session的时候,会生成一个sessionID,用来识别保存在服务器端的sessionID

② 配置信息

PHP里面配置session可以通过PHP配置文件来进行相关的配置

Session.Auto_start:是否自动启动session,如果设置为1,则为自动启动,这个选项一般不改他它。

Session.cookie_lifetime:代表cookie的有效时间,单位为秒,如果值为0,代表浏览器一关闭就失效

Session.save_pathsession在客户端所存储的位置

Session.namesession的名字,默认值为PHPSESSID

③  Session的使用

如果要使用session,那么首先第一步需要开启session,开启方法很简单,在PHP里面提供了一个session_start()

该函数有两个作用,第一个是开启会话环境,第二个是检查客户端有没有发送过来sessionID,如果没有,自动生成一个sessionID,然后通过cookie的方式发送给客户端。

接下来第二次访问页面的时候,就会将之前保存在客户端的sessionID发送给服务器

通过session_id()函数可以取出sessionID信息

④ session里面添加数据

方法非常简单,直接像使用数组一样使用即可

Session存在的路径位于wamp下面的tmp文件夹,我们可以打开来确认

⑤ 注销变量和销毁session

PHP里面有3种删除session的方式

(1) 删除单个的数据

Unset($_SESSION[‘key’])

示例:

效果:

(2) 删除所有数据

当然是可以使用unset()来一个一个删除,但是这样太麻烦了,如果有100个数据,工作量相当之大。所以,如果要删除所有数据,可以直接将一个空数组赋值给$_SESSION

效果:

(3) 结束当前会话

PHP里面为我们提供了一个函数,叫做session_destroy(),一旦调用该函数,就会删除当前会话中的所有数据,并且注销会话,也就是说,会将sessionID也一并删除掉

⑥ 传递sessionID

(1) 使用cookie进行sessionID的传递。但是这种方法并不是总是可用。因为用户可以将cookie禁止掉(这种情况很少)。所以还有一种方式:通过URL附加信息的方式

(2) 通过URL附加信息的方式

⑦ Cookiesession的区别

(1) cookie是存放于客户端,session是存放于服务器端

(2) 由于session是存放于服务器端,所以安全性比cookie要高

(3) Cookie相比session更能分散服务器的压力,因为数据都分散到了各个客户端。但是这不足以让我们完全使用cookie,因为安全性更重要。

综上所述:将很重要的用户信息存放至session,不怎么重要的信息可以存放到cookie里面。

原文地址:https://www.cnblogs.com/q1345837355/p/7403695.html