详解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可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
深入解析php模板技术原理【一】
Jan 10 PHP
php中在PDO中使用事务(Transaction)
May 14 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
destoon调用自定义模板及样式的公告栏
Jun 21 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
May 13 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
解决laravel中日志权限莫名变成了root的问题
Oct 17 PHP
PHP7 字符串处理机制修改
Mar 09 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
JavaScript学习笔记(十)
2010/01/17 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
电脑教师的教学自我评价
2013/11/26 职场文书
简短大学毕业感言
2014/01/18 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
债务追讨律师函
2015/06/24 职场文书
小学生读书笔记
2015/07/01 职场文书
公司费用报销管理制度
2015/08/04 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
导游词之江西赣州
2019/10/15 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS