会话技术

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的应用

为什么需要sessionsession翻译成中文:会话的意思

Cookie虽然好用,但是有一个很严重的问题,那就是不安全,因为所有的信息都是存储在客户端里面,用户可以随意修改。还有一个问题,就是用户可以手动的停止cookie的使用。

 

所谓session,就是将会员的信息保存在商场(服务器)这一方,而不是用户(客户端)那一方。之后用户(客户端)在去商场(访问服务器端)的时候,只需要报出电话号码(sessionID)即可。所以这个时候,就相当于由服务器端(商场)来保存sessionID(会员卡),但是用户手上也必须会员卡号(sessionID)。

 

① 设置session

Session是一种服务器端技术,默认session的有效期从开始访问网站到关闭浏览器。使用session的时候,会生成一个sessionID,用于识别保存在服务器端的sessionID

 

②  Session的配置

通过PHP的配置文件可以修改session的相关配置

Session.auto_start:是否自动启动session,如果设置为1,则为自动启动,但是这个选项我们一般不会去改它。

 

Session.namesession的名字,默认为PHPSESSID

 

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

 

Session.save_pathsession保存的路径,默认是保存在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彻底清除,但是客户端的存放sessionIDcookie还存在。所以我们还需要一个收尾的工作,就是将存放于客户端的sessionIDcookie也一并删除掉

 

 

⑥ 传递sessionID

传递sessionID默认是采用的cookie的形式来传递,但是客户端有可能将cookie给禁用掉(当然这种情况很少),如果用户禁用了cookie,这个时候我们还可以通过get的方式将sessionID附加到URL后面

 

 

⑦ Cookiesession的比较

Cookie是存放客户端,session是存放于服务器端

相比Cookiesession的安全性更高

虽然session相比cookie更安全,但是也有自身的缺点,那就是占用服务器的资源。不过好在一关闭浏览器,session就过期了,然后PHP里面有一个叫做垃圾回收的功能,会定期的删除掉过期的sessionID

 

综上所述:如果我们要存储用户的相关状态信息,例如等级,金币,银币,使用session,如果是存储不怎么重要的,那么就使用cookie将其存储到客户端,以分散服务器的压力

以上是关于会话技术的主要内容,如果未能解决你的问题,请参考以下文章

会话技术

会话技术--cookie

会话技术--cookie

会话技术

会话技术基础学习

会话及会话管理技术