Session 和cookie机制详解
参考:
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机制详解的更多相关文章
- HTTP Session、Cookie机制详解
一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...
- Session的工作机制详解和安全性问题(PHP实例讲解)
我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. ...
- session与cookie的详解
在PHP面试中 经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间. 大家都知道,session是存储在服务器端的,cookie是存储在客户端的,session依赖于c ...
- Session和Cookie对比详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 【转】Cookie/Session机制详解
Cookie/Session机制详解 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息 ...
- Chrome的cookie放在哪里了,Cookie/Session机制详解
Chrome的cookie放在哪里了,Cookie/Session机制详解:https://blog.csdn.net/u010002184/article/details/82082951
- ssion机制详解
ssion机制详解 ref:http://justsee.iteye.com/blog/1570652 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚sess ...
- session的使用方法详解
session的使用方法详解 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器 ...
- 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)
文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...
随机推荐
- Android SQLite基本用法
SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...
- Selenium+C#自动化脚本开发学习
1:Selenium中对浏览器的操作 首先生成一个Web对象 IWebDriver driver = new FirefoxDriver(); //打开指定的URL地址 driver.Navigate ...
- hdu 4068 I-number【大数】
题目: http://acm.hdu.edu.cn/showproblem.php?pid=4608 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- Zookeeper Curator 事件监听 - 秒懂
目录 写在前面 1.1. Curator 事件监听 1.1.1. Watcher 标准的事件处理器 1.1.2. NodeCache 节点缓存的监听 1.1.3. PathChildrenCache ...
- Js版json解析
JsonDecoder={ pos:0, isDigit:function(ch){ return ( ch >= '0' && ch <= '9' )||( ch == ...
- CF1060 E-Sergey and Subway
题目戳这里 一句话题意 一棵树,任意相隔一个点的两个点连一条新边(原边留下),问所有点对的距离之和. Solution 本来看见是黑题有点怕,但仔细一想也没有那么难. 先处理出每个点的深度(dep)和 ...
- eclipse安装Activiti Designer插件(转载:http://blog.csdn.net/qq_33547950/article/details/54926435)
为了完成毕业设计,需要学习Activiti.万事开头难,果然刚开始就遇到了问题.<Activiti实战>和视频教程里提供的安装Activiti Designer插件方法(即下文方法一)不能 ...
- ip地址设备信息
其实是个小问题,在项目中遇到要获取手机ip地址和mac地址的问题,mac地址获取用appcan的uexDevice插件可以实现. 但是ip地址,获取的方式很多,具体有搜狐/腾讯/新浪等提供的接口.但是 ...
- ARDUINO W5100 WebServer测试
1.直接下载官方的enternet->WebServer代码 /* Web Server A simple web server that shows the value of the anal ...
- php中生成随机密码的自定义函数代码
这篇文章主要分享下php中生成随机密码的方法,原理就是把一些要生成的字符预置一个的字符串包括数字拼音之类的以及一些特殊字符,这样我们再随机取字符组成我们想要的随机密码了 代码一: 生成一个随机密码的函 ...