参考:

http://blog.csdn.net/fangaoxin/article/details/6952954/

http://blog.csdn.net/hjc1984117/article/details/53995816

http://www.cnblogs.com/woshimrf/p/5317776.html

一、session是什么?

  1.sessio的来源:

  浏览器打开一个网页,采用的是HTTP协议。HTTP协议是无状态的,即这一次请求和上一次请求是没有任何关联的。

  这种无状态的好处是:响应速度快。

  无状态存在的问题是:当我们希望请求的几个页面互相关联时,就会存在问题。

  例如,在登录页面登录之后,其他页面也希望保持登录状态,但是不同的页面也是不同的请求,不同请求无关,因此无法单纯判断是否已经登录了。

  因此,cookie技术出现了,可以解决这个问题。然而cookie是客户端技术,用户可见,可以随意修改,很不安全。

  最后,session会话机制出现了。

  2.session是什么?

  在一次会话中,解决不同HTTP请求的关联问题,让他们产生联系,不同的页面都可以读取到全局的session的信息。session是服务器端技术,很好解决安全问题。

二、session 的创建,删除和存储。

  2.1 session的创建

  session是在服务器端程序运行中被创建的。创建的语句是HttpSession session=request.getSession().

  session被创建的同时会生成一个唯一的sessionID。这个sessionID会被发送到客户端,写在cookie中。

  当客户端再次发送请求时,会在请求头上加上这个sessionID。服务器收到请求之后会依据这个sessionID在内存找到这个全局session,再次使用。

  注意:

  1.这个sessionID是整个session机制的核心。

  2.session的内容是被保存在服务器端的。被发送到客户端的只有sessionID。

  3.sessionID的生成算法:随机数+时间+jvmid  (jvmid都是唯一的,因此sessionID一定是唯一的)

  2.2 session的删除

  session并不会因为关闭浏览器而被删除。

session生成之后,只要用户继续访问,服务器就会更新session最后被访问的时间,并维护该session。即用户的session活跃了一次。

  为了防止内存溢出,服务器会把长时间没有活跃的session从内存中删除。这个时间就是session的超时时间。因此,超过了超时时间没有访问服务器,session就会被删除。

  session被关闭的情况:

  1.超时

  2.调用方法HttpSession.invalidate()

  3.程序关闭;

  2.3 session的存储

  session被存储在服务器端的内存中,不过也可以通过特殊的方式持久化管理。

  如果session的内容过于复杂,当有大量用户访问的时候,就会容易导致内存溢出,因此session的内容应该尽量精简。

三、cookie是什么?

  由于HTTP是无状态协议,服务器无法从网络连接上确定用户的身份。所以服务端给每个客户端一个标识(通行证)。

  服务器通过该标识来确定客户端的身份。cookie实际上是一小段文本信息。

  cookie的工作原理:

  客户端向服务器端发送请求,服务器使用response向客户端颁发一个cookie。

  客户端保存该cookie。当再次发送请求时,cookie被一同提交给服务器。

  服务器检查该cookie,以此来辨认用户的状态。

 四、cookie的创建,删除,修改。

  4.1 cookie的创建

    Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie

    cookie.setMaxAge(60);                             // 设置生命周期为60秒,不能为负数

    response.addCookie(cookie);                    // 讲该cookie颁发给客户端

  4.2 cookie 的有效期

    cookie.setMaxAge();

    参数为正 :多少时间之后cookie失效,并会被持久化到对应的cookie文件中。

    参数为负: 为临时性cookie,不会被持久化到cookie文件中,只暂时被保存到浏览器内存中,

         浏览器关闭之后就会消失。

    参数为零:表示删除该cookie。

  4.2 cookie的删除

    如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,

    并添加到response中覆盖原来的Cookie。

  4.3 cookie 的修改

        如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。

五、session和cookie的区别

  1.session是在服务端记录客户端状态的机制。cookie是在客户端记录客户端状态的机制。

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

   session是在服务器端存放了“用户档案表”,客户来访,查客户的档案。

   cookie是给客户颁发通行证,客户来访,检查客户身上的通行证。

  3.session更安全。

六、session和cookie的使用案例。

  session:保持登录状态。

  cookie :统计网站用户访问量。 request.getCookie()获取客户端提交的所有Cookie。(以cookie[]数组形式返回)。

        永久登录。把用户名和密码保存在cookie中。下次访问时,和数据库比较。

  

Session 和cookie机制详解的更多相关文章

  1. HTTP Session、Cookie机制详解

    一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...

  2. Session的工作机制详解和安全性问题(PHP实例讲解)

    我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. ...

  3. session与cookie的详解

    在PHP面试中 经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间. 大家都知道,session是存储在服务器端的,cookie是存储在客户端的,session依赖于c ...

  4. Session和Cookie对比详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  5. 【转】Cookie/Session机制详解

    Cookie/Session机制详解   会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息 ...

  6. Chrome的cookie放在哪里了,Cookie/Session机制详解

    Chrome的cookie放在哪里了,Cookie/Session机制详解:https://blog.csdn.net/u010002184/article/details/82082951

  7. ssion机制详解

    ssion机制详解   ref:http://justsee.iteye.com/blog/1570652 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚sess ...

  8. session的使用方法详解

    session的使用方法详解 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器 ...

  9. 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)

    文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...

随机推荐

  1. math课本复习

    第七章 微分方程 第一节 微分方程的基本概念    未知函数.未知函数的倒数与自变量之间的关系的方程,叫做微分方程. 第二节 可分离变量的微分方程 第三节 齐次方程 第四节 一阶线性微分方程 总结:任 ...

  2. 自定义circleindicator

    在此申明,并不是自己写的,只是为了方便日后使用 我使用的circleindicator是从大神的gitHub中弄来的, 使用如下: 一.在配置中导入 compile 'me.relex:circlei ...

  3. hdu_1226超级密码(BFS)

    超级密码 Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密码是 ...

  4. java操作文件流对象

    所有流对象 InputStream 字节流         FileInputStream 字节流 专门读写非文本文件的         BufferedInputStream 高效流 OutPutS ...

  5. 九度OJ 1340:小A的计算器 (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:735 解决:202 题目描述: 以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-2 ...

  6. iOS启动页加载广告

    1.定义全局成员变量 @interface AppDelegate () @property (strong, nonatomic) UIImageView *adImageView; @proper ...

  7. G20峰会将会给数字货币带来哪些影响?

    G20峰会对于全球经济有着举足轻重的影响,其成员人口占全球的2/3,国土面积占全球的60%,国内生产总值占全球的90%,贸易额占全球的75%……作为国际经济合作的主要平台,G20在引领和推动国际经济合 ...

  8. 如何用excel urldecode解码把url编码转为汉字?

    统计分析可以反映出网站运营的情况,并根据实际作出相应的调整,是站长必需的基础技能.ytkah感觉最好用的是谷歌统计,里面有个搜索关键词及对应受访页面,这个功能对优化用处很大,但大家都知道访问不太顺畅. ...

  9. Basis 基础

    [转自 http://www.cnblogs.com/elegantok/archive/2008/11/03/1325163.html] 1 Basis1. Unix操作 更改口令 passwd e ...

  10. Java中的String,StringBuilder,StringBuffer三者的区别(转发:https://www.cnblogs.com/su-feng/p/6659064.html)

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...