会话技术
Posted 胡智杰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了会话技术相关的知识,希望对你有一定的参考价值。
Cookie的应用
① Cookie的概述
在现实生活中,如果在商场里面购买东西,一般都会有会员,这张会员卡,就记录了用户的相关信息(姓名,电话号码,积分信息)。下一次再去商店的时候,只要带上这一张会员卡,商场方就就可以通过这张会员卡将你信息识别出来。
Cookie相当于就是这张会员卡。当用户第一次访问网站的是,服务器端(商场)会将cookie(会员卡)发送到客户端(用户),下一次客户端再次访问服务器端的时候,就会在HTTP请求里面自动的将之前的cookie给带过去,服务器端根据这个cookie就可以识别出该用户了
② 向客户端发送cookie
在php里面,发送cookie非常简单,有一个函数setcookie()可以向客户端发送信息
函数的原型如下:
Setcookie(cookie的名字,cookie的值,cookie的生存时间,cookie的有效目录,cookie的有效域名,是否通过安全协议HTTPS来传输cookie)
关于cookie生存的时间是以当前的时间戳来进行计算的。
如果cookie设置成功,返回true
查看响应头,可以看到确实是向客户端发送了cookie信息
当我们访问其他页面的时候,HTTP请求里面就会自动的带上之前发送过来的cookie
③ 在PHP里面读取cookie信息
方法非常简单,在PHP里面有一个$_COOKIE[ ]的超全局数组,该超全局数组是用来存放从客户端发送过来的cookie的信息。
如果没有书写过期时间,cookie的有效期是多久?
如果没有书写cookie,那么cookie会在浏览器关闭的时候过期
⑤ 删除cookie
如何删除cookie,方法非常简单,还是用setcookie函数,只需要value为空,然后时间小于当前系统的时间即可,如下:
Setcookie(cookie名称,””,time()-100)
还有一种方法更简单,只要书写cookie名称就可以了,但是和上面的方法相比有区别
区别在于这种方法是置空cookie,但是键还在。
基于Cookie的登录模块
详细参见【基于cookie的登录模块】
Session的应用
为什么需要session?session翻译成中文:会话的意思
Cookie虽然好用,但是有一个很严重的问题,那就是不安全,因为所有的信息都是存储在客户端里面,用户可以随意修改。还有一个问题,就是用户可以手动的停止cookie的使用。
所谓session,就是将会员的信息保存在商场(服务器)这一方,而不是用户(客户端)那一方。之后用户(客户端)在去商场(访问服务器端)的时候,只需要报出电话号码(sessionID)即可。所以这个时候,就相当于由服务器端(商场)来保存sessionID(会员卡),但是用户手上也必须会员卡号(sessionID)。
① 设置session
Session是一种服务器端技术,默认session的有效期从开始访问网站到关闭浏览器。使用session的时候,会生成一个sessionID,用于识别保存在服务器端的sessionID
② Session的配置
通过PHP的配置文件可以修改session的相关配置
Session.auto_start:是否自动启动session,如果设置为1,则为自动启动,但是这个选项我们一般不会去改它。
Session.name:session的名字,默认为PHPSESSID
Session.cookie_lifetime:代表cookie有效的时间,单位为秒,如果值为0,代表关闭浏览器的时候失效
Session.save_path:session保存的路径,默认是保存在wamp下面的tmp目录下
③ 使用session
如果要使用session,那么首先需要开启session,在PHP里面提供了一个函数
Session_start()
该函数有两个作用:1. 开启会话环境 2. 检查客户端有没有发送过来sessionID,如果没有,则自动生成一个sessionID,发送到客户端。
第一次访问denglu.php 效果:http响应头里面自动生成了一个sessionID并且发送给客户端
第二次访问denglu.php的时候,客户端由于已经有了sessionID,所以会在http请求里面自动将这个sessionID带给服务器端,服务器端就会进行相应的查找
④ 向session里面存入信息
向session里面存入方法非常简单,就和我们平时使用数组
我们先用浏览器访问test.php这个时候会发生两件事情:1. 服务器检查有没有从客户端发送sessionID过来,因为我们是第一次访问,没有sessionID从客户端发送过来,所以服务器自动生成一个sessionID,发送给客户端。
2. 在服务器下面存储了2个变量
接下来我们再来访问test2.php 1.服务器检查有没有从客户端发送sessionID过来,这一次就有sessionID从客户端发送过来了。2. 接下来服务器将从客户端发送过来的session和服务器下面的sessionID进行匹配,匹配上之后,就从服务器下面取出相应的值。
⑤ 注销变量和销毁session
在PHP里面有3种方式删除session中的数据。
(1) 删除单个数据
语法:unset($_SESSION[‘key’])
效果:注意第一次访问该页面还是能够正常的显示出两个值,但是第二次再访问的时候,
(2) 删除所有的数据
如果要删除所有的session数据,unset虽然可以,但是太麻烦了,所以我们可以将一个空数组赋值给session
这种删除方法虽然删除了服务器下面对应session的所有数据,但是sessionID还是存在的
(3) 销毁session
PHP里面为我们提供了一个函数 session_destory(),调用该函数,会销毁服务器下面的sessionID
通面的步骤,我们可以将服务器端的session彻底清除,但是客户端的存放sessionID的cookie还存在。所以我们还需要一个收尾的工作,就是将存放于客户端的sessionID的cookie也一并删除掉
⑥ 传递sessionID
传递sessionID默认是采用的cookie的形式来传递,但是客户端有可能将cookie给禁用掉(当然这种情况很少),如果用户禁用了cookie,这个时候我们还可以通过get的方式将sessionID附加到URL后面
⑦ Cookie和session的比较
Cookie是存放客户端,session是存放于服务器端
相比Cookie,session的安全性更高
虽然session相比cookie更安全,但是也有自身的缺点,那就是占用服务器的资源。不过好在一关闭浏览器,session就过期了,然后PHP里面有一个叫做垃圾回收的功能,会定期的删除掉过期的sessionID。
综上所述:如果我们要存储用户的相关状态信息,例如等级,金币,银币,使用session,如果是存储不怎么重要的,那么就使用cookie将其存储到客户端,以分散服务器的压力
以上是关于会话技术的主要内容,如果未能解决你的问题,请参考以下文章