
Cookie是客户端技术;Session是服务器端技术。这里重点讲一下session。
API:
javax.servlet.http:Class Cookie
javax.servlet.http:Interface HttpSession
session对象概要介绍
web服务器会给每一个用户自动创建一个session
对象,为每一个session
对象分配一个唯一表识的String
类型的ID
,这个ID
用来区分其他用户。这样每个用户都对应一个session对象,不同用户的session
对象互相不同。
- 当在不同文件夹里放不同的jsp文件并分别运行时:一个用户在同一个web服务目录中只有一个session对象
- 当用户访问相同的web服务目录的其他页面时,web服务器不会在重新分配
session
对象,直到用户关闭浏览器或这个session
对象达到了它的生存期限。 - 当用户重新打开浏览器再次访问该web目录时,web服务器为该用户在创建一个新的session对象。
需要注意的是:同一个用户在多个不同的web服务目录
中对应的session
对象时不同的,一个服务目录对应一个session
对象
- 当用户访问相同的web服务目录的其他页面时,web服务器不会在重新分配
生命周期
session对象由服务器创建
- 创建:调用
request
对象的getSession
方法后才会创建session
对象;getSession(false
)`只获取, 不创建 - 销毁:默认30分钟没人使用则自动销毁。失效时间可在
web.xml
的<session-config
>标签中使用<session-timeout
>,单位分钟;也可调用session
对象的invalidate方法
销毁
session对象的应用:
- 用户登录
- 防止表单重复提交(暂时还不了解)
- 一次性验证码的校验(暂时还不了解)
使用session的案例:模拟在线考试系统1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session1</title>
</head>
<body>
<form action="sessionTest2.jsp" method="post">
考号:
<input type="text" name="id"/>
<p>
一、单项选择题(每题2分)
<br/><br/>
1.下列哪个方法是获取session中关键字是key的对象( )。
<br />
<input type="radio" name="one" value="A"/>
A.public void setAttribute(String key, Object obj)<br/>
<input type="radio" name="one" value="B"/>
B.public void removeAttribute(String key)<br/>
<input type="radio" name="one" value="C"/>
C.public Enumeration getAttributeNames()<br/>
<input type="radio" name="one" value="D"/>
D.public Object getAttibute(String key)<br/>
</p>
<p>
二、判断题(每题2分)
<br/><br/>
1.同一客户在多个Web服务目录中,所对应的session对象是互不相同的。
<br/>
<input type="radio" name="two" value="True"/>
True
<input type="radio" name="two" value="False"/>
False
</p><br/>
<input type="submit" value="提交" name=submit>
<input type="reset" value="重置" name=reset>
</form>
</body>
</html>

1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |

1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |

关于cookie
一些细节:
- 一个cookie只能标识一种信息,至少含有标识该信息的名称和值
- 浏览器一般只允许存放300个cookie,每个站点最多存放20个,每个cookie大小限制为4KB
- 默认是会话级别cookie(存储于浏览器内存),浏览器进程关闭则删除。有效期通过maxAge设置,存于硬盘,0表示删除
- 删除cookie时,path必须一致,否则不会删除