PHP会话技术
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
在PHP里面读取Cookie信息
在PHP里面提供了一个$_COOKIE[ ]这是一个超全局数组。该超全局数据用来存放从客户端发送过来的cookie信息。
如果没有写过期时间,cookie的有效期是多久?
如果没有书写cookie的过期时间,那么默认cookie将会在浏览器关闭时过期。
删除cookie
如何手动的删除cookie,方法很简单,还是调用setCookie函数,只需要value为空,然后时间小于当前的系统时间即可
还有一种方法删除cookie,只设置第一个参数,其他参数全部省略
这一种方式cookie并没有被删除,只是被置空了。
Session的应用
Session翻译成中文是会话的意思。虽然cookie可以解决前面我们所说的问题。但是cookie有一个严重的问题,那就是存储于客户端,所以安全性不高。而且用户有权利阻止cookie使用如果用户一旦关闭cookie,那么Web服务器无法再使用cookie来跟踪用户。所以,session技术出现了。Session就是将用户的状态信息保存在服务器端。
如果说cookie是一张会员卡,这张会员卡由用户自己保存。如果用户的会员卡丢失,用户就不能再证明自己的身份。但是session就是将这张会员卡由商场方来保存,无需用户保存,用户只需要提供卡号就可以了。
1.设置session
Session是一种服务器端技术。默认session的有效期从开始访问网站开始,到断开和网页的链接。
使用session的时候,会生成一个sessionID,用来识别保存在服务器端的sessionID。
2.配置信息
在PHP里面配置session可以通过PHP配置文件来进行相关的配置
Session.Auto_start:是否自动启动session,如果设置为1,则为自动启动,这个选项一般不改他它。
Session.cookie_lifetime:代表cookie的有效时间,单位为秒,如果值为0,代表浏览器一关闭就失效
Session.save_path:session在客户端所存储的位置
Session.name:session的名字,默认值为PHPSESSID
3.Session的使用
如果要使用session,那么首先第一步需要开启session,开启方法很简单,在PHP里面提供了一个session_start()
该函数有两个作用,第一个是开启会话环境,第二个是检查客户端有没有发送过来sessionID,如果没有,自动生成一个sessionID,然后通过cookie的方式发送给客户端。
接下来第二次访问页面的时候,就会将之前保存在客户端的sessionID发送给服务器
4.往session里面添加数据
方法非常简单,直接像使用数组一样使用即可
5.注销变量和销毁session
在PHP里面有3种删除session的方式
(1) 删除单个的数据
Unset($_SESSION[‘key’])
(2) 删除所有数据
当然是可以使用unset()来一个一个删除,但是这样太麻烦了,如果有100个数据,工作量相当之大。所以,如果要删除所有数据,可以直接将一个空数组赋值给$_SESSION
(3) 结束当前会话
在PHP里面为我们提供了一个函数,叫做session_destroy(),一旦调用该函数,就会删除当前会话中的所有数据,并且注销会话,也就是说,会将sessionID也一并删除掉
a) 传递sessionID
(1) 使用cookie进行sessionID的传递。但是这种方法并不是总是可用。因为用户可以将cookie禁止掉(这种情况很少)。所以还有一种方式:通过URL附加信息的方式
(2) 通过URL附加信息的方式
6.Cookie和session的区别
(1) cookie是存放于客户端,session是存放于服务器端
(2) 由于session是存放于服务器端,所以安全性比cookie要高
(3) Cookie相比session更能分散服务器的压力,因为数据都分散到了各个客户端。但是这不足以让我们完全使用cookie,因为安全性更重要。
综上所述:将很重要的用户信息存放至session,不怎么重要的信息可以存放到cookie里面。
以上是关于PHP会话技术的主要内容,如果未能解决你的问题,请参考以下文章