对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数据了。
Cookie | session | |
会话数据存储位置 | 浏览器端 | 服务器端 |
安全性 | 低 | 高 |
数据传输量 | 大 | 小 |
支持会话数量 | 有限制,单个最大4k | 无限制 |
支持数据类型 | 字符串 | ALL |
对Cookie和Session的理解的更多相关文章
- 关于cookie与session的理解
服务器端并不能捕获客户端的浏览器关闭事件,因此你关闭浏览器以后,服务器端那个Session还是存在的,要超时以后才被回收,启动一个新的浏览器会启动一个新的session,所以他不认你了session永 ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
- pyhton框架Django之cookie和session
一,cookie和session的理解 cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies.它保存在浏览器下的某个文 ...
- 会话机制,Cookie和Session详解
转载自:https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- 转:理解Cookie和Session机制
原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...
- cookie&&session再理解笔记
就拿php来说,两个php页面之间不拿get,post传递变量的话,数据是不能共享的.访问完1.php页面该页面的变量就被销毁了.所以就拿学校食堂来说,拿现金买饭的话你交完钱后,他给你个票以便确认你, ...
- 理解Cookie和Session机制
转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...
随机推荐
- css3文字截断
width:200px; height:14px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; text-overflow ...
- 早停法(Early Stopping)
一.早停法简介(Early Stopping)当我们训练深度学习神经网络的时候通常希望能获得最好的泛化性能(generalization performance,即可以很好地拟合数据).但是所有的标准 ...
- VMware Ubuntu 窗口太小 未安装VMwareTools
安装vmtools就行了:在虚拟机点击重新安装vmtools. 在虚拟机里点开挂载的,将那个压缩文件拉出document,解压 在命令行sudo运行.pl结尾的文件,一路回车就行了. 重启即可.
- Django的models操作
一.先看单表操作 增 方式1: models.book.objects.create( Book_name = "aaa", Book_info = "bbb" ...
- LocalBroadcastManager 的使用
一.使用本地广播发送一条广播(本例为自己发送自己接收,本地广播也可以是其他应用接收)然后接收到广播时回调Receiver类中的回调方法onReceive()在此方法中自定义发出通知 代码 packag ...
- 什么是maven,jar包的查找过程?
1.什么是maven? Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. 2.什么是项目管理工具? 就是SVN.对于SVN的介绍见我的上一篇博客 ...
- Spring框架的IOC之注解方式的快速入门
1. 步骤一:导入注解开发所有需要的jar包 * 引入IOC容器必须的6个jar包 * 多引入一个:Spring框架的AOP的jar包,spring-aop的jar包 2. 步骤二:创建对应的包结构, ...
- 手机端图片预览和缩放js
转至:http://blog.sina.com.cn/s/blog_c342e3090102vcxu.html 1.手机端的图片选择和预览 <input type="file" ...
- CSV 文件
CSV 文件 CSV(Comma Separated Values 逗号分隔值) 是一种文件格式(如.txt..doc等),也可理解 .csv 文件就是一种特殊格式的纯文本文件.即是一组字符序列,字符 ...
- android 弹出软键盘将底部视图顶起问题
今天要做一个搜索功能,搜索界面采用AutoCompleteTextView做搜索条,然后下面用listview来显示搜索结果,而我的主界面是在底 部用tab做了一个主界面导航,其中有一个搜索按钮,因为 ...