对Cookie和Session的理解

本篇文章系自己总结经验,如果有朋友感觉哪里有问题,欢迎留言评论,谢谢~!



Cookie和Session的产生背景:

在动态页面里面,每个变量都是有有效期的,所有的变量的最大生命周期就是一个脚本的周期(拿PHP来说,浏览器向服务器发出一次请求,请求到达服务器后,服务器将该请求交由PHP处理,PHP处理完了以后交给服务器,最后服务器响应给浏览器,这就是一个脚本周期,也就是一个变量的最大有效期)。

这时候问题出来了,如果我登录了一个网站,这个网站需要确定我是不是它的用户,第一次请求我成功登录了该网站的首页,然后我开始浏览这个网站上的其他网页,浏览其他网页的时候,这个网站的服务器该怎么确定我是不是已经登录上了该网站呢?

这时候就需要使用一个变量来保存这个标志,而这个标志可以代表我是已经合法登录上来了,所以这个变量的有效周期就需要被延长,那么怎么延长呢?

这个时候会话技术出现了(在同一台浏览器与网站服务器的多次请求之间,将数据持久存储的一种技术),它的前提是B/S请求响应模式,是无状态的(也就是在任意的请求之间,不存在任何的联系,不能将请求状态保持下去。)那么会话机制的实现是用什么来实现的?

答案是1.cookie 2.Session


下面是对cookie的介绍:

百度百科的解释:

    Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。


从上面我们可以知道,Cookie是浏览器端的一种技术。那么我们写程序的时候应该怎么使用Cookie呢?下面是使用Cookie的基本操作(PHP):


设置(增删改):

SetCookie(key, value) :完成Cookie数据的设置(增),key存在则更新(改),不存在则添加。如果值为空字符串,表示删除该key(删)

获取(查):

$_COOKIE['KEY']:PHP在初始化阶段,会将所有的cookie数据整理到此变量中,供PHP脚本使用。

设置Cookie的有效期(第三个参数):

setCookie("key","value",timestamp):第三个参数采用时间戳表示。

特殊的有效期值:0:表示默认的,也就是一个会话周期;

  time()-1 :删除Cookie的标准做法,比如:setCookie('key','',time()-1)

PHP_INT_MAX:逻辑上表示永久有效的Cookie,实际上是到了2038年。。。

Cookie的有效期

判定Cookie的有效期的是浏览器,服务器在设置Cookie时,会告诉浏览器该Cookie的有效期。浏览器在发送请求的时候会判断Cookie是否有效,只有没有过有效期的cookie数据才会被携带。

设置Cookie的有效路径(第4个参数):

setCookie("key", "value", "timestamp", /): ‘/’:表示整站有效。也就是同一域名下都有效。

Cookie的有效路径

Cookie在当前路径以及后代路径有效。这里的路径,不是代码文件所在的本地磁盘路径,而是浏览器访问的url路径关系。不同路径下面,同名的Cookie可以同时存在于浏览器中。也就是Cookie中可能会出现两个key一样的。

设置Cookie的有效域(第5个参数):

setCookie("key", "value", timestamp, /, "blog.hengshare.top"):表示在blog.hengshare.top这个二级域名下面都有效。为空表示在当前请求url的域名下面有效。

设置是否仅安全传输(第6个参数):

setCookie("key", "value", timestamp, /, domain, true|false):为true表示仅支持安全传输,false为默认值,表示不管是HTTP还是HTTPS,都可以将有效的Cookie携带至服务器端

设置HTTPonly(第7个参数):

setCookie("key", "value", timestamp, /, domain, true|false, true|false):默认为false,表示浏览器存储的Cookie是可以被其他脚本所处理的。为true时,表示Cookie仅可以在http请求中使用,建议:true



下面是对Session的解释:

同样的,先贴出来百度百科的解释:

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。注意 会话状态仅在支持 cookie 的浏览器中保留。

根据以上解释,我们知道session是一种基于Cookie的一种机制。而与Cookie不同的是,session的会话数据是存放在服务器端的,仅在浏览器端维持一个sessionid,用来标识某个会话对应的服务器端的session数据区,用来配对使用。下面是对session的详细使用(PHP):


开启session:

session_start(); :也可以通过PHP的配置文件设置为自动开启。(php.ini中对应的选项为:session.auto_start)

利用$_SESSION操作session数据:

$_SESSION['KEY'];  :(session可以存放任意类型的数据,cookie只能存放字符串数据)

session的会话数据默认存放在服务器端操作系统的临时目录/tmp中。

销毁session:

session_destory();    :删除当前的session对应的数据区,关闭session机制。并不完成session的写操作。

完整删除与当前session相关的全部数据:

session_destory();  //删除数据区

unset($_SESSION); //销毁变量

setCookie(session_name(), '', time()-1); //销毁cookie中的sessionid

清空session数据:

$_SESSION=array();   //不要使用unset($_SESSION)

session 的数据属性:

1.有效期:session.cookie_lifetime

2.有效路径:session.cookie_path

3.有效域:session.cookie_domain

4.是否仅安全传输:session.cookie_secure

5.是否仅http使用:session.cookie_httponly

修改以上的属性有以下几种办法:

1.更改php.ini配置文件(不建议)

2.通过在脚本中使用ini_set()来进行配置修改,仅在设置后的脚本周期内有效,要保证在开启session前设置完毕。

3.使用特定功能函数:session_set_cookie_params(有效期,有效路径,有效域,是否仅安全传输,是否httponly);  注意:也是要在开启session之前设置完毕。


session的一些注意事项:

session可以存放任意类型的数据,因为session数据区里面的数据是经过序列化以后才存储的。

$_SESSION数组的下标,仅仅可以是字符串类型。

session_start()函数类似于header()函数,前面不应该有输出。

在同一脚本内使用session_destory()函数,之后如果对session进行了操作,并不会将修改保存到session数据区,所以在下次脚本周期就不能获取到存储的session数据了。

session和Cookie比较
 Cookiesession
会话数据存储位置浏览器端服务器端
安全性
数据传输量
支持会话数量有限制,单个最大4k无限制
支持数据类型字符串ALL


转载于:https://www.cnblogs.com/StivenYang/p/8441288.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值