Cookie和Session 会话技术

什么是会话技术

HTTP协议是无状态、无记忆的。多次请求之间,无任何的联系,无法把请求的状态保存下去,即同一用户请求同一网站的不同页面,服务器无法识别是否是同一用户发起的请求。用户无法进行连续的业务逻辑。

在同一台浏览器对服务器的多次请求中,将数据持久化存储的技术,以实现连续的业务逻辑。

会话周期:从打开浏览器,访问一些web资源,直至关闭浏览器为止,这个时间间隔为会话周期。

会话周期结束可能导致某些数据失效。

会话技术分类:按照数据持久化的位置进行区分,如果数据保存在浏览器端,我们称之为cookie技术,如果数据保存在服务器端,我们称之为session技术。

cookie原理:我们的cookie数据是保存在浏览器端的,我们每次请求的时候,都会携带这个信息.

这样的话,服务器就认识我们了

① 我们的浏览器如果是第一次请求服务器, 是没有cookie信息的.这个时候我们的第一次请求没有携带任何cookie信息, 请求发给服务器之后, A脚本会通过 setcookie来给我们设置一个cookie

② 响应的时候会携带设置的cookie信息, 浏览器接收到这个响应之后,会把cookie信息保存在浏览器的cookie区域中

③ 如果我们再次请求 同一个网站的时候,我们的请求会携带cookie信息.

④ 服务器脚本会通过$_COOKIE来获取 请求携带的cookie,通过这个cookie信息来识别浏览器

 

PHPcookie的语法:

设置:setcookie(key,value);

读取cookie:$_COOKIE[key] 根据预定义变量获取cookie信息

修改cookie:setcookie('原来key',新value);

删除cookie:setcookie('原来key','') 直接给空即可

数据类型的要求:

cookie一般都是存放字符串. 只能存放基本数据类型(数值类型,bool类型,字符串)

不能存放数组类型;

 HTTP协议角度看cookie

发送请求信息请求时请求头中没有携带任何cookie信息,再次请求的时候,请求头中会携带cookie信息,服务器脚本可以通过$_COOKIE来获取cookie数据

cookie是基于浏览器的,切换浏览器就读取不到原来的信息,还基于域名,不同域名也是无法获取。

cookie的属性:

有效期:声明周期,在设置的时候可以直接设置声明周期,setcookie(key,value,有效期);

默认声明周期:默认不设置,或者设置为0,表示一个会话周期之后,cookie自动销毁

自定义生命周期:setcookie(key,value,time() + 时间) 例如:time() + 24*60*60 设置一天有效期

设置永久有效:setcookie(key,value,PHP_INT_MAX)

设置成过期时间:setcookie(key,value,time()-1);

cookie的有效路径:

默认我们不设置cookie的有效路径,只能 在当前目录及其子目录中获取cookie,它的父目录是获取不到的.

我们可以通过设置cookie的第四个参数为 ‘/’ 让所有的页面都可以访问到,setcookie(key,value,有效期,’/’)

COOKIE的有效域名:

一级二级 或者是多级  2个不同的域名, 域名与域名之间的cookie数据是不同享的

如果我们想让三级域名共享cookie,就需要 设置cookie的第5个参数为 高一级的域名(二级域名)

setcookie(key,value,有效期,路径,”域名”);

 

什么是session?

为了实现业务逻辑的连续性,将部分信息持久化存储在服务器端,可以保证数据的安全性及各个脚本之间的共享。

原理:

 

浏览器和服务器之间认证的桥梁就是这个PHPSESSID

session数据是保存在 服务器上, 而且是多个脚本可以共享session数据, 我们的浏览器想要访问session数据的话,也是需要身份认证的.

PHP中使用session需要去php.ini里开启session 在php.ini中 搜索session.auto_start 然后把注释打开

或者在脚本中用session_start()开启session

session_start之后,它会在 服务器上创建一个文件.

这个文件默认在 c:/windows/temp文件夹

可以通过修改PHP.ini中的 session.save_path 修改session的存文件路径

PHP中操作session:

添加session数据:$_SESSION[key] =value;

存储类型除资源型都能存储

读取session数据:$_SESSION[key]就可以读取到

删除session数据:unset删除一个数据 清除所有 unset($_SESSION)

销毁session信息

session_destroy() 文夹就彻底不存在了

从HTTP协议及COOKIE角度分析session原理:

① session是依赖于cookie的, cookie 是依赖于浏览器
sesion也是依赖于 浏览器的. 因为cookie是不一样的
我刚才用chrome浏览器设置的sesion数据,能否用firfox读取到? 不能用firfox读取到.
② 如果我用firfox打开一个设置session的脚本,那么也会在c:/windows/tem会创建一个文件

SESSION的垃圾回收机制:

垃圾回收机制介绍:

垃圾回收机制GC(garbage collection )

垃圾回收机制就是将不用的数据进行回收.

系统自动的内存回收机制就是让我们程序员不用过多的关心内存内容,而且关注功能的实现.

session垃圾回收机制:

 

session的垃圾回收机制第一个它是采用一个概率性的事件进行回收.
当我们的程序执行session_start()的时候,就会有一定的概率去对session数据进行回收.
第二步: 如果这个概率发生了,发生了之后什么文件改删,什么文件不该删呢?
文件的有效期默认是1440秒, 24分钟.
我们可以通过session.gc_max
时间 = 当前时间 – 文件最后的修改/访问时间
时间 >  24分钟 过期了
时间 <  24分钟没有过期
在php.ini文件中,搜索 session.gc_
一般情况下我们的分母只会改大.减少数据的删除.

 

 

SESSION与COOKIE之间的区别与联系:

 

区别:

1)    存储位置
2)    数据安全性
3)    传输的数据量
4)    支持的数据类型

联系:

都是用来解决HTTP协议的无状态、无记忆的不足之处,以实现业务的连续性,如登录及购物车实现。
二者都是会话技术的范畴 。
SESSION需要依赖COOKIE(浏览器的身份信息)进行数据的传递。禁用COOKIE后,SESSION无法正常使用。

 

 

 

posted @ 2018-03-13 01:02  不知名程序猿  阅读(189)  评论(0编辑  收藏  举报