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的更多相关文章

  1. 转:理解Cookie和Session机制

    原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...

  2. 理解Cookie和Session机制

    转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...

  3. 形象地理解Cookie和Session

    Cookie和Session的形象理解 通过实际生活中的银行卡来理解Cookie和Session间的关系: Cookie相当于银行卡 Session相当于银行账户 结合到银行存钱和取钱的过程来理解: ...

  4. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token

    为什么你学不会递归?告别递归,谈谈我的一些经验   可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...

  5. 基础知识《十二》一篇文章理解Cookie和Session

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

  6. 深入理解Cookie和Session机制

    转载理解Cookie和Session机制 目录 Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Coo ...

  7. 理解cookie,session,token

    彻底理解cookie,session,token 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新 ...

  8. [转帖]彻底理解cookie,session,token

    彻底理解cookie,session,token https://www.cnblogs.com/moyand/p/9047978.html 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已 ...

  9. 一文理解Cookie、Session

    一文理解Cookie.Session 1.什么是会话 用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话: HTTP 是无状态,有会话的 HTTP 是无 ...

  10. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

随机推荐

  1. tomcat使用及原理

    1,Tomcat作为Servlet容器的基本功能 2,Tomcat的组成结构 Tomcat本身由一列的可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器.T ...

  2. ASP.NET-HTTP管道模型

    HTTP管道模型处理WEB程序很小的一方面.管道模型是类似于Web Services的一种在服务器端处理ASP.NET页面的框架技术 一.管道对象模型 在System.Web的命名空间中处理HTTP的 ...

  3. UNIX基础【UNIX入门经典】

    最早在学校很流行.学生毕业以后就会为公司购买操作系统.导致UNIX流行 UNIX内核: Shell:sh csh ksh 其他组件:

  4. flex 通过htmlservices链接moss的rest(rest 的get post方式)

    一:flex debug(调试)--trace() --moss导入 flex学习:1.flex出现不能使用trace调试语句的问题,控制台无信息输出.这个问题不须要改动安装文件的參量. 仅仅须要下载 ...

  5. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新

    项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行. 以下是使用原生的lua解释器编译字节码: 1 ...

  6. Edison Chou

    .NET中那些所谓的新语法之中的一个:自己主动属性.隐式类型.命名參数与自己主动初始化器 开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法.它们相对曾经的老语法相比.做了非常多的改进, ...

  7. Android中文API-ViewStub

    ViewStub控件是一个不可见,0尺寸得惰性控件.当ViewStub控件设置可见,或者调用inflate(),并运行完毕之后,ViewStub所指定的layout资源就会被载入.这个ViewStub ...

  8. 使用XMLHttpRequest解析json

    不适用内函数或者promise的方式,可以在外部提取到json数据 <!DOCTYPE html> <html lang="en"> <head> ...

  9. ES索引模板——就是在新建索引时候指定的正则匹配来设置mapping而已,对于自动扩容有用

    索引模板 扩容设计 » 索引模板 Elasticsearch 不要求你在使用一个索引前创建它. 对于日志记录类应用,依赖于自动创建索引比手动创建要更加方便. Logstash 使用事件中的时间戳来生成 ...

  10. 乔治·霍兹(George Hotz):特斯拉、谷歌最可怕的对手!

    17岁破解iPhone,21岁攻陷索尼PS3:现在,他是埃隆·马斯克最可怕的对手.   黑客往事   许多年后,当乔治·霍兹(George Hotz)回首往事,一定会把2007年作为自己传奇人生的起点 ...