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

具体来说 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用法小结的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 基于java中cookie和session的比较

    cookie和session的比较 一.对于cookie: ①cookie是创建于服务器端 ②cookie保存在浏览器端 ③cookie的生命周期可以通过cookie.setMaxAge(2000);来设置,如果没有设置setMaxAge, 则cookie的生命周期当浏览器关闭的时候,就消亡了 ④cookie可以被多个同类型的浏览器共享  可以把cookie想象成一张表 比较: ①存在的位置: cookie 存在于客户端,临时文件夹中 session:存在于服务器的内存中,一个session域对

  • JavaWeb使用Session和Cookie实现登录认证

    后台管理页面往往需要登录才可以进行操作,这时就需要Seession来记录登录状态 要实现起来也是非常简单,只需要自定义一个HandlerInterceptor就行了 自定义的HandlerInterceptor也只有短短几行代码 public class LoginInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpSer

  • 带你了解session和cookie作用原理区别和用法

    Cookie概念 在浏览某些 网站时,这些网站会把一些数据存在客户端,用于使用网站等跟踪用户,实现用户自定义功能. 是否设置过期时间: 如果不设置 过期时间,则表示这个 Cookie生命周期为 浏览器会话期间 , 只要关闭浏览器,cookie就消失了.       这个生命期为浏览会话期的cookie,就是会话Cookie; 存储:          一般保存在内存,不在硬盘;       如果设置了过期时间, 浏览器会把cookie保存在硬盘上,关闭再打开浏览器, 这些cookie依然有效直到

  • 浅谈cookie 和session 的区别

    具体来说 cookie 是保存在"客户端"的,而session是保存在"服务端"的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域: 如果cookie不设置生命周期,则以浏览器关闭而关闭,这种cookie一般存储在内存而不是硬盘上.若设置了生命周期则相反,不随浏览器的关闭而消失,这些cookie仍然有效直到超过设定的过 期 时间. session 一种类似散列表的形式保存信息, 当程序需要为某个客户端的请求创建一个

  • cookie、session和java过滤器结合实现登陆程序

    cookie.session和过滤器通常都是用在web应用中,cookie和session用来保存一定的数据,过滤器Filter则是在浏览器发出请求之后,而后台执行特定的请求之前发生一定的作用.之所以把这三个放一起,是因为有很多时候都会是把他们结合在一起使用,例如有些登陆程序. cookie是浏览器的机制,session是服务器的机制,但是实际上cookie也是由服务器生成的,之后返回给浏览器的,并不是浏览器本身生成.当浏览器发送某个请求时,如果拥有有效的cookie则会把这个cookie带在一

  • 深入探究Django中的Session与Cookie

    前言 Cookie和Session相信对大家来说并不陌生,简单来说,Cookie和Session都是为了记录用户相关信息的方式,最大的区别就是Cookie在客户端记录而Session在服务端记录内容. 那么Cookie和Session之间的联系是怎么建立的呢?换言之,当服务器接收到一个请求时候,根据什么来判断读取哪个Session的呢? 对于Django默认情况来说,当用户登录后就可以发现Cookie里有一个sessionid的字段,根据这个key就可以取得在服务器端记录的详细内容.如果将这个字

  • php及codeigniter使用session-cookie的方法(详解)

    1.读写cookie <1>原生 setcookie('name','value',time) 设置失败,没有正常写入浏览器,测试失败,原因未知 <2>CI框架 $this->input->set_cookie("views","test10",1000); echo $_COOKIE["views"];//此方法获取值时,如果值不存在会报错,当然可以先用isset($_COOKIE["views&q

  • 详解node.js平台下Express的session与cookie模块包的配置

    首先下载两个模块包 session模块包:用于保持登录状态或保持会话状态等. npm install express-session --save-dev cookie模块包:用于解析cookie. npm install cookie-parser --save-dev 接着在app.js(我在node.js的配置中提到的,也就是服务器主文件)中配置: var session = require("express-session"); var cookie = require(&qu

  • Cookies 和 Session的详解及区别

    Cookies 和 Session的详解及区别 1.cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据. 2.session其实指的就是访问者从到达某个特定主页到离开为止的那段时间. Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了. 注:为这个用户创建的Cookie的名称是aspsessio

  • 关于session和cookie的简单理解

    0. 引子,我们为什么要cookie和session 因为http请求是无状态的(不能记录用户的登录状态等),所以需要某种机制来保存用户的登录状态等信息,在下次访问web服务的时候,不用再次校验是否登录等状态,session机制和cookie机制分别是在服务器端和浏览器端的解决方案. 1.关于cookie 1.1  什么是cookie cookie,原意饼干.用来在浏览器端存储用户的状态信息,然后在访问后端的时候将这部分信息带回到后端. cookie的内容主要包括:名字,值,过期时间,路径和域

  • java中Cookie被禁用后Session追踪问题

    一.服务器端获取Session对象依赖于客户端携带的Cookie中的JSESSIONID数据.如果用户把浏览器的隐私级别调到最高,这时浏览器是不会接受Cookie.这样导致永远在服务器端都拿不到的JSESSIONID信息.这样就导致服务器端的Session使用不了. Java针对Cookie禁用,给出了解决方案,依然可以保证JSESSIONID的传输. Java中给出了再所有的路径的后面拼接JSESSIONID信息. 在 Session1Servlet中,使用response.encodeURL

  • php页面跳转session cookie丢失导致不能登录等问题的解决方法

    thinkphp开发的一个项目,登录成功后又跳转到登录页面,在提交信息后输出session都是正常的,没有问题,但是页面跳转后,session出现丢失现象,无法正常完成登陆. 通过查找资料,发现原来是bom头的原因.受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效.一切依赖COOKIE.SESSION实现的功能全部无效. 正确的处理方法是去掉某些文件的bom,一般情况是在入口文件出现的

随机推荐