详解PHP中cookie和session的区别及cookie和session用法小结


Posted in PHP onJune 12, 2016

具体来说 cookie 是保存在“客户端”的,而session是保存在“服务端”的

cookie 是通过扩展http协议实现的

cookie 主要包括 :名字,值,过期时间,路径和域;

如果cookie不设置生命周期,则以浏览器关闭而关闭,这种cookie一般存储在内存而不是硬盘上.若设置了生命周期则相反,不随浏览器的关闭而消失,这些cookie仍然有效直到超过设定的过 期 时间。

session 一种类似散列表的形式保存信息,

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识

(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。

优缺点:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:

将登陆信息等重要信息存放为SESSION

其他信息如果需要保留,可以放在COOKIE中

Session和Cookie的使用总结:

Session和cookie都是asp.Net中的内置对象,至于他们有什么区别,在这里就不在多说,现在来说说一些比较实用点的东西:

我们知道网站都有一个后台管理系统,其中有登录和退出两个功能,在登录的时候我们往往会把用户的信息保存到session或者cookie中,以便后面使用,那么在登录的时候我们要注意哪些呢?

1、把一些敏感的东西存到session中,不太敏感的东西可以存在session或者Cookie中,比如用户名就是不太敏感,但是介于有些浏览器不支持cookie的使用,所以我们会把它存到session中,但是session有的时候在服务器中容易丢失,所以我们可以结合cookie一起使用,就是说当session的丢失的时候,如果cookie还在我们设定的有效期内,就可以再一次从Cookie中取出值放进session里,所以我们最好同时用session和cookie保存用户名等信息或者在配置文件里

<sessionState timeout="2" mode="StateServer" />

来解决session丢失的问题也可以

2、我们希望后台管理在多长时间没有操作的情况下,让session失效,重新登录,可以使用session.timeout=5,以分钟为单位,表示5分钟之内没有其他操作,就失效,或者在配置文件中配置<sessionState timeout="5" mode="InProc" />也可以

3、cookie有效期的设置

httpCookie.Expires = DateTime.Now.AddMinutes(2);

cookie的有效期为2分钟

4、页面中判断是否有权限访问该网页的时候,可以如下判断:

if (Request.Cookies["httpCookie"] != null)
{
Session["admin"] = Request.Cookies["httpCookie"].Values["admin"].ToString();
}
if (Session["admin"] == null)
{
this.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('请重新登 录');location.href='logins.aspx'</script>");
}

下面在来说说退出的时候该怎么做比较好

1、 退出的时候session和Cookie的值都要清空,现在来简单说说session的几个方法的区别:

Session.clear():表示将会话中所有的session的键值都清空,但是session还是依然存在,同等于Session.RemoveAll()

Session[“admin”]=null:表示将制定的键的值清空,并释放掉,和session[“admin”]=””不一样,它清空了,但是session不释放,同等于session.Remove(“name”);

Session.Abandon()就是把当前Session对象删除了,下一次就是新的Session了。

主要的不同之处在于当使用Session.Abandon时,会调用Session_End方法(InProc模式下)。当下一个请求到来时将激发Session_Start方法。而Session.Clear只是清除Session中的所有数据并不会中止该

Session,因此也不会调用那些方法,Abandon方法用于主动结束会话,若没有调用该方法,当会话超时后,也会自动结束当前会话。

2、 下面在来看看如何清除cookie

A、tpCookie cookie = System.Web.HttpContext.Current.Request.Cookies.Get("tuser");

cookie.Expires = DateTime.Now.AddDays(-1);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);

B、tpCookie httpCookie = Request.Cookies["httpCookie"];

httpCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(httpCookie);

AB两种方法都可以

3、 所以session清除当前的值就可以了即Session[“admin']=null就可以了,Cookie按照以上方法清除即可

建议和意见:

1、 在退出的时候我们可以在创建一个logout的页面来写时间,这样比较好一些

2、 无论在进行什么操作的时候,能用If判断是否为空的情况下就尽量的判断,防止出现了空指针异常

以上所述是小编给大家介绍的详解PHP中cookie和session的区别及cookie和session用法小结的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
通过对php一些服务器端特性的配置加强php的安全
Oct 09 PHP
缓存技术详谈―php
Dec 14 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
Php-Redis安装测试笔记
Mar 05 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
laravel框架使用极光推送消息操作示例
Feb 15 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 #PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 #PHP
再谈PHP中单双引号的区别详解
Jun 12 #PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 #PHP
linux下php上传文件注意事项
Jun 11 #PHP
php设计模式之单例模式代码
Jun 11 #PHP
浅谈PHP Cookie处理函数
Jun 10 #PHP
You might like
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
Python函数学习笔记
2008/10/07 Python
python 字符串split的用法分享
2013/03/23 Python
Python字符编码判断方法分析
2016/07/01 Python
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
python区块及区块链的开发详解
2019/07/03 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python实现无边框进度条的实例代码
2020/12/30 Python
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
商务英语本科生的自我评价分享
2013/11/15 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
航空学院求职信
2014/06/11 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
详解Vue router路由
2021/11/20 Vue.js