原文地址
当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接,请求的相关数据将不再存在,这样明显有不好的地方。cookie和session解决了这一问题,客户端(一般是浏览器)与服务器之间的交互,将操作所涉及的数据记录下来,保存在cookie(保存在浏览器客户端)或者session(保存在服务器)中。
一、cookie
1、什么是cookie
浏览器在访问服务器时,服务器将一些数据以 set-cookie 消息头的形式发送给浏览器。浏览器会将这些数据保存起来。当浏览器再次访问服务器时,会将这些数据以 cookie 消息头的形式发送给服务器。
2、创建 cookie
- 1
- 2
cookie的name不可以重复,和Map集合类似,当有重复的name的时候,会替代。
3、查询cookie
- 1
- 2
- 3
- 4
4、cookie 保存时的编码问题
cookie 的值叧能是ascii 字符,如果是中文,需要将中文转换成 ascii 字符形式。可以使用 URLEncoder.encode()方法和 URLDecoder.decode()方法来进行这种转换。
5、cookie 的保存时间
cookie.setMaxAge(int seconds);//单位为秒
seconds > 0
浏览器会将 cookie 以文件的方式保存在硬盘上。在超过指定的时间以后,会删除该文件。
seconds < 0
默认值,浏览器会将 cookie 保存在内存里面。叧有当浏览器关闭以后,才会删除。
seconds = 0
立即删除该 Cookie
6、删除 cookie
比如要删除一个 name 为”username”的 cookie。
Cookie c = new Cookie(“username”,”“);
c.setMaxAge(0);
cookie.setPath(request.getContextPath());//路径
response.addCookie(c);
7、cookie 的限制
cookie 可以禁止
cookie 的大小有限制(4k 左右)
cookie 的数量也有限制(浏览器大约能保存 300 个)
cookie 的值叧能是字符串,要考虑编码问题。
cookie 不安全
8、cookie 的路径问题
浏览器在向服务器上的某个地址发送请求时,会先比较 cookie 的路径不向访问的路径(地址)是否匹配, 叧有匹配的 cookie, 才会发送。
cookie 的路径可以通过 cookie.setPath(String path)方法来设置。如果没有设置, 则有一个缺省的路径,缺省的路径是生成该 cookie 的组件的路径。
比如: /appname/addCookie 保存了一个 cookie,则该 cookie 的路径就是/appname/addCookie。
规则:
cookie 的路径必须是要访问的路径的上层目录戒者是不要访问的路径相等, 浏览器才会将 cookie 发送给服务器。一般可以设置 setPath(“/appname”),表示访问该应用下的所有地址,均会发送
二、session
1、什么是session
浏览器访问服务器时,服务器会创建一个 session 对象(该对象有一个唯一的 id, 一般称为 sessionId)。服务器在缺省情况下,会将 sessionId 以 cookie 机制发送给浏览器。当浏览器再次访问服务器时, 会将sessionId 发送给服务器。 服务器依据 sessionId 就可以找到对应的 session 对象。
2、如何获得 session 对象
HttpSession session = request.getSession();
3、HttpSession 接口提供的一些方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4、session保存时间设置
服务器会将超过指定时间的 session 对象删除(在指定的时间内,该 session 对象没有
使用)。
两种设置方式:
方式一:
session.setMaxInactiveInterval(int seconds);
方式二:
服务器有一个缺省的超时限制,可以通过相应的配置文件来重新设置。比如可以修改 tomcat 的 web.xml(tomcat_home/conf 下面)。
- 1
- 2
- 3
另外,也可以叧修改某个应用的 web.xml。
5、session删除
session.invalidate();
三、用cookie记录最近10条记录
用cookie查询最近一个月请求的前10条历史记录。cookie的中文要求转码和解码。如下图
1、加入cookie到客户端
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2、获取所有满足条件的cookie
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
3、js实现历史清除
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
至此即可查询出最近一个月的前10条历史记录。