【转】学习总结--Cookie & Session总结
转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view
一、状态管理
1)什么是状态管理?
将浏览器与web服务器之间多次交互过程当做一个整体来处理,并且将多次交互所涉及的数据进行管理。
2)状态管理技术
cookie:
a,什么是cookie?
是一种客户端(浏览器)的状态管理技术。
浏览器在访问web服务器的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这结数据保存下来;当浏览器再次访问服务器的时候,会将这些数据以cookie消息头的方式发送给服务器。
b,创建cookie
Cookie c = new Cookie(String name,String value);
response.addCookie(c);
c, 查询cookie
//如果没有cookie,返回null
Cookie[] request.getCookies();
String cookie.getName();
String cookie.getValue();
d, 编码问题
cookie的值只能是ascii字符,对于中文,需要将中文转换成相应的ascii字符串的表示形式。
String URLEncoder.encode(String,String enc)
//创建 new Cookie(String name,URLEncoder.encode(String,"utf-8"))
String URLDecoder.decode(String,String)//取
URLDecoder.decode(cookie.getValue(),"utf-8")
e, cookie的生存问题
默认情况下,浏览器会将cookie保存在内存里,除非浏览器关闭,cookie一直存在。
用setMaxAge(int seconds)设置cookie保存时间
该方法需要注意:
(1) 单位是秒
(2) seconds >0 : cookie会保存在硬盘上,超过指定的时间,浏览器会删除该cookie。
seconds <0 : 缺省值(保存在内存里)
seconds =0: 删除cookie,
比如,要删除一个名叫addr的cookie:
Cookie c = new Cookie("addr","");
c.setMaxAge(0);
response.addCookie(c);
f,cookie的路径问题
f1:浏览器在向服务器的某个地址发请求时,会先比较cookie的路径与要访问的这个地址是否匹配,只有匹配的cookie才会发送。
f2:cookie会有一个路径(是一个字符串),该路径默认情况下等于创建该cookie的组件的路径。
比如,/web06_2/app1/addCookie.jsp创建的cookie,其路径就等于"/web06_2/app1"。
/web06_2/findCookie.jsp error
/web06_2/app1/findCookie1.jsp ok
/web06_2/app1/sub/findCookie2.jsp ok
f3: 只有要访问的地址是cookie的路径或者其子路径时,浏览器才会发送该cookie。
f4:可以用setPath(String path);方法设置cookie的路径
常见的使用是: setPath("/appname");访问该应用的所有资源都会带cookie过去了
g,cookie的限制
(1), cookie可以被用户禁止。
(2), cookie能够保存的数据大小有限制(大约4k)。
(3), cookie的个数有限制(浏览器在本地最大能够保存约300个左右的cookie)。
(4), cookie不安全
session:
(1)什么是session?
是一种服务器端的状态管理技术。
浏览器访问服务器的时候,服务器会创建一个session对象(每一个session对象都有唯一的一个id号,一般称之为sessionId),默
认情况下,服务器会使用cookie技术将sessionId发送给浏览器,浏览器会将sessionId保存下来。当浏览器再次访问服务器的时候,会将
sessionId发送给服务器,服务器依据sessionId,就可以找到之前创建的session对象。
(2)如何获得session对象?
a, 方式一:
HttpSession s = request.getSession();
等价于request.getSession(true)。
b, 方式二:
HttpSession s = request.getSession(boolean flag);
当flag=true时:
服务器会查看请求当中是否有sessionId,如果没有,则创建一个session对象;如果有sessionId,则依据sessionId查找对应的session对象,如果找到了,则返回;找不到,再创建一个新的session对象。
当flag=false时:
服务器会查看请求当中是否有sessionId,如果没有,会返回null;如果有sessionId,则依据sessionId查找对应的session对象,如果找到了,则返回;找不到,返回null。
(3)HttpSession中声明的几个常用方法
setAttribute(String name,Object obj);
//如果绑订名称对应的值不存在,返回null。
Object getAttribute(String name);
removeAttribute(String name);
(4)session的超时
1)服务器会将空闲时间过长的session对象从内存空间当中删除。服务器一般会有一个缺省的超时时间限制(30分钟)。
2)可以修改超时限制
对于tomcat,可以修改conf\web.xml,修改完成需要重新启动服务器。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3)编程的方式
setMaxInactiveInterval(int seconds);
(5) 删除session
invalidate();
二、session与cookie的区别
(1)cookie是一种客户端的状态管理技术,将状态写在浏览器端,
而session是一种服务器端的状态管理技术,将状态写在web服务器上面。
(2) cookie有很多限制:
a,可以被用户禁止
b,cookie能够保存的数据比较小(大约4k),而且保存的个数也有限制(300个左右)。
c,cookie不安全
d,cookie只能保存字符串
而session能够保存更多的数据,相对更安全,保存的数据类型更丰富。
session会将所有的状态写在服务器端,所以服务器的压力比较大,而cookie没有这个问题。
小知识:如果用户禁止cookie,如何继续使用session(了解)
(1)url重写
在请求地址后面添加sessionId,一般由服务器来生成这个地址。
(2)编程:
//链接地址,表单提交地址
a, response.encodeURL(String url);
//重定向
b, response.encodeRedirectURL(String url);
//转发根本不用考虑
【转】学习总结--Cookie & Session总结的更多相关文章
- python 学习笔记十九 django深入学习四 cookie,session
缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...
- Web安全测试学习笔记(Cookie&Session)
一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...
- Django学习手册 - cookie / session
cookie """ cookie属性: obj.set_cookie(key,value,....) obj.set_signed_cookie(key,value,s ...
- Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期
servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...
- node(4)express 框架 EJS模板,cookie, session的学习
一.EJS 概述:前端咱们使用过的一个模板套路,是underscore的套路.接下来EJS它属于后台工程师人的模板. https://www.npmjs.com/package/ejs 官网地址 特点 ...
- Javaweb学习笔记5—Cookie&Session
今天来讲javaweb的第五阶段学习. Cookie和Session同样是web开发常用到的地方. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的 ...
- Java web学习 Cookie&&Session
cookie&&session 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会 话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Coo ...
- node学习之cookie和session
c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏 ...
- node学习笔记9——cookie,session相关操作
下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...
随机推荐
- 终于发现为什么SQL没有释放句柄,原来是保存句柄的变量被覆盖了,丢失了原来的句柄
stmt = xxx , stmt = yyy , stmt.close() 之前的xxx 没有close掉
- 部署基于JDK的webservice服务类
部署服务端 两个注解(@WebService @WebMethod).一个类(Endpoint) 首先新建JAVA工程ws-server 目录结构如下 在工程里新建一个接口,申明一个方法. packa ...
- java io读书笔记(6) Writing Arrays of Bytes
显而易见,一次性写出一堆数据,要比一个byte一个byte的写,快多了,因此,outputstream,给出了2个增强型的write: public void write(byte[] data) t ...
- G面经prepare: Android Phone Unlock Pattern
1 2 3 4 5 6 7 8 9 只有中间没有其他键的两个键才能相连,比如1可以连 2 4 5 6 8 但不能连 3 7 9 但是如果中间键被使用了,那就可以连,比如5已经被使用了,那1就可以连9 ...
- fzuoj Problem 2179 chriswho
http://acm.fzu.edu.cn/problem.php?pid=2179 Problem 2179 chriswho Accept: 57 Submit: 136 Time Limi ...
- PHP的几个常用加密函数(转载 https://jellybool.com/post/php-encrypt-functions)
PHP的几个常用加密函数 在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密函数 MD5加密: string md5 ( string $str [, b ...
- -XX:+PrintGCDetails 打印GC详细信息
-XX:+PrintGCDetails –打印GC详细信息 n-XX:+PrintGCDetails的输出 –Heap – def new generation total 13824K, ...
- 夺命雷公狗---Thinkphp----14之前台的首页完善
我们先来完成我们的首页部分,我们首页要先来完成到焊条部分和右侧的导航部分: 我们先来写控制器: 然后在右侧遍历头部遍历出我们所需要的数据: 因为我们的右侧是引入进来的,所以我们需要到右侧视图下进行遍历 ...
- JS中数组的操作
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- C语言初学者代码中的常见错误与瑕疵(7)
问题: 矩形的个数 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形.给出A,B,计算可以从中找到 ...