深入理解cookie与session
cookie和session是web开发比較基础也比較重要的知识,cookie和session用于用户的状态管理。简单的来说它们都仅仅是http中的一个配置项,在Servlet规范中也仅仅相应一个类而已。http对cookie的数量和大小有限制,而session不易于在非常多的server中进行共享。
Session与Cookie的作用都是为了保持訪问用户与后端server的交互状态。
他们有各自的长处和缺陷。但一个server訪问量非常大的时候,比方一天又几亿个pv,假如每一个cookie占用200个字节。那么它须要多少带宽了。所以訪问量大的时候希望使用session。可是session的致命弱点是不easy在多台server之间共享。这也限制了session的使用。
以上的这些资料来自阿里的java web技术内幕
为了解决cookie和session的缺陷,并结合他们的优势,利用session的分布式框架。能够节省带宽。和解决session的同步问题,详细的能够參考阿里内部技术资料java web技术内幕。
1.状态管理
server对用户訪问的状态进行管理
http请求是一次性请求,但同一用户可能会通过http协议向server发送多次请求
用了管理用户多次请求(登录開始到退出为止,中间多次请求操作为同一用户),此时
须要对用户进行状态管理
状体管理的两种方式:
1.在client保存数据管理状态(cookie)
2.在server端保存数据管理状态(session)
2.session
用户首次訪问server,server会为每一个用户单独创建一个session对象(HttpSession),
并为每一个session分配唯一一个id(sessionId),sessionId通过cookie保存到用户端。
。
当用户再次訪问server时,需将相应的sessionId携带给server,server通过这个唯一
sessionId就能够找到用户相应的session对象,从而达到管理用户状态
1.获得session对象
a.request.getSession(flag);
当flag=true时,server会查找用户是否用sessionId,假设sessionId为Null,
则server会创建一个新的session对象返回给用户(sessionId)
假设sessionId存在,则会依据相应的sessionId去查找session对象。假设session
对象存在则直接返回。假设不存在则创建新的session对象并返回。
当flag=false;server会查找用户是否用sessionId,假设sessionId为Null,则返回
为null,假设sessionId,则会依据相应的sessionId去查找session对象。假设session
对象存在则直接返回,假设不存在则返回为Null。
b.request.getSession();
等效于request.getSession(true);
2.session经常使用API
存:session.setAttribute(key,value);
取:session.getAttribute(key);
删除:session.removeAttribute(key);
-------------------------------------------------------
1.状态管理
前提:http协议请求是一次性请求。但在通常情况下又须要记住用户,管理用户状态
2.状态管理方式方法
1.client保存数据(Cookie)
2.server端(Session)
3.session
由于用户首次訪问,server会检查sessionId没有则创建session对象,并将对象的sessionId
发送给用户(response对象。以cookie方式),当用户再次訪问。须要携带相应的sessionId
(request对象,以cookide方式)。server会检查相应sessionId,存在则查找相应的session对象
并返回给用户。假设sessionId存在而相应session对象不存在,server会创建新的session对象并
将这个新得到sessionId返回给用户。
4.session的API
a.HttpSession session=request.getSession(true/false);
b.HttpSession session=request.getSession();
public static HttpSession getSession(){
return getSession(true);
}
//重载的方法之间常常重用
比如:点与圆之间的距离
class Circle{
double getDistance(int x,int y){
return Math.sqrt((this.x-x)(this.x-x)-(this.y-y)(this.y-y));
}
double getDistance(Point p){
return getDistance(p.getX(),p.getY());
}
}
c.session.setAttribute(key,value);
d.session.getAttribute(key);-value(Object)
e.session.removeAttribute(key);
f.session.getSessionId();
【练习】使用session记录用户的訪问次数
5.session的有效期
全部用户的session对象都保存在server,则server空间有限,全部不能永久保存session
即sesion对象在server中保存的有效时间
设置session有效期:
1.//设置session有效期
session.setMaxInactiveInterval(15);
2.server设置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3.在servlet相应的web.xml中配置
6.踢出session
session.invalidate();
7.Session失效
禁用cookie会导致session失效
原理:client无法保存server发送的sessionId,所以訪问时没有sessionId,那么依据
session创建原理。server会创建新的session对象返回给用户
解决方案:URL重写
原文:http://blog.csdn.net/j903829182/article/details/39855221
深入理解cookie与session的更多相关文章
- 转:理解Cookie和Session机制
原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...
- 理解Cookie和Session机制
转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...
- 形象地理解Cookie和Session
Cookie和Session的形象理解 通过实际生活中的银行卡来理解Cookie和Session间的关系: Cookie相当于银行卡 Session相当于银行账户 结合到银行存钱和取钱的过程来理解: ...
- 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token
为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...
- 基础知识《十二》一篇文章理解Cookie和Session
理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定 ...
- 深入理解Cookie和Session机制
转载理解Cookie和Session机制 目录 Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Coo ...
- 理解cookie,session,token
彻底理解cookie,session,token 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新 ...
- [转帖]彻底理解cookie,session,token
彻底理解cookie,session,token https://www.cnblogs.com/moyand/p/9047978.html 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已 ...
- 一文理解Cookie、Session
一文理解Cookie.Session 1.什么是会话 用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话: HTTP 是无状态,有会话的 HTTP 是无 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
随机推荐
- MySQL 数据备份与还原 转载
MySQL 数据备份与还原 一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldum ...
- MyBatis学习总结(5)——实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- VC6.0VB6.0 Scratch等软件
VC6.0VB6.0 Scratch等软件 http://pan.baidu.com/s/1nv4hJrb
- Swift开发教程--怎样使UITableViewController背景透明
self.tableView.backgroundView? .backgroundColor = UIColor.clearColor(); self.tableView.backgroundCol ...
- Hadoop 2.2.0和HBase-0.98 安装snappy
1.安装须要的依赖包及软件 须要安装的依赖包有: gcc.c++. autoconf.automake.libtool 须要安装的配套软件有: Java6.Maven 关于上面的依赖包,假设在ubun ...
- 优化报表系统结构之报表server计算
在报表项目中,经常会碰到数据库压力非常大影响整个系统性能的问题.由以下的传统方案的结构示意图能够看出.所有数据存储和源数据计算都放在数据库完毕.当并发訪问量较大的时候,尽管每一个报表的数据量不大,还是 ...
- 英语影视台词---七、THE GREAT GATSBY QUOTES
英语影视台词---七.THE GREAT GATSBY QUOTES 一.总结 一句话总结:了不起的盖茨比 1.“So we beat on, boats against the current, b ...
- nyoj--1087--摆方格(规律)
摆方格 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个n*n的方格,每个方格里的数必须连续摆放如 1 2 4 3 ,下图为不连续的,请输出从左上角到右下角的对角 ...
- linux操作系统下完全删除oracle数据库
1.关掉oracle server 和 background processes ps -ef | grep ora 关掉数据库 shutdown immediate 2.关掉监听 lsnrctl ...
- lucene简单使用demo
测试结构目录: 1.索引库.分词器 Configuration.java package com.test.www.web.lucene; import java.io.File; import or ...