cookie、session
Cookie与Session简述
1 会话
程序中会话可以简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会 话。
比如:输入网址进入优酷,然后我在这优酷这个网站里的所有跳转。访问的时候,这个会话就已经开始……关闭浏览器的时候,这个会话就结束……
2 会话跟踪
HTTP是无状态协议,没有记忆力,不知道哪一个客户端请求了自己,每个请求之间无法共享数据。这就无法知道会话什么时候开始,什么时候结束,也无法确定发出请求的用 户身份。
在一次会话中多次请求共享数据即会话跟踪技术
3 Cookie
cookie是一种会话跟踪技术,Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/valu e保存到某个目录下的文本文件内,下次 请求同一网站时就发送该Cookie给服务器。Cookie是属于浏览器端的技术。自动地在Web服务器和浏览器之间来回传递的一小块信息,适用于那些需要跨越许多页面的信 息。
Cookie的原理:把共享数据存储在浏览器中.每次请求,再把共享数据带到服务端.
cookie的创建:
//创建一个Cookie
Cookie nameCookie = new Cookie("name", "zhaoyi");
//将Cookie还给浏览器
response.addCookie(nameCookie);
得到cookie:
1. String name = "";
2. //得到所有Cookie
3. Cookie[] cookies = request.getCookies();
4. //循环拿每一个Cookie
5. if(cookies != null){
6. for (Cookie cookie : cookies) {
7. //如果cookie的名称等于name,则是我们想要的那一个
8. if("name".equals(cookie.getName())){
9. name = cookie.getValue();
10. }
因为cookie不支持中文,所以应该在创建cookie对象之前将编了码的字段放进去
//创建之前先编码
name = URLEncoder.encode(name,"utf-8");
//创建一个Cookie
Cookie nameCookie = new Cookie("name", "zhaoyi");
然后在得到cookie的值之前解码
if("name".equals(cookie.getName())){
//得到之前进行解码
name = URLDecoder.decode(name,"utf-8");
name = cookie.getValue();
}
如果需要修改cookie指定名的value值,则可以按照下面两种方式
方式1: 根据name获取被修改的Cookie对象,在调用setValue方法即可.
方式2: 重新创建一个同名的Cookie.
但是需要注意的是,修改cookie的值之后,需要将修改过后的cookie交给浏览器
response.addCookie(nameCookie);
在看看cookie的生命周期
关闭浏览器之后cookie就消失了,就是说这个时候cookie保存的数据就没有了
但是,通常情况下,都可以通过cookie对象的setMaxAge(int seconds);方法来设置cookie的存活时间
seconds>0:可以存活多少秒.
seconds<0:存放在浏览器进程中,闭浏览器Cookie就丢失了.
seconds=0:删除Cookie. 删除cookie之后也需要调用response.addCookie(nameCookie);
cookie的缺点:
处理中文麻烦
不安全
一个Cookie只能存储简单的类型 Cookie的value只能是字符串,不能是对象
。。。。所以,可以使用Session
4 Session
session与cookie一样,也是一红会话跟踪技术,被称为会话控制,在所有的session追踪技术中,Httpsession对象是最强大、功能最多的。HttpSession对象是放到 服务器内存中的,因此数量尽量不要太多,session也是通过cookie来实现的
session得实现
服务器创建Session--》将所有数据放到Session中--》发一个key给客户端--》客户端拿着key到服务器中找到自己保存的数据
这里的key就是一个cookie,名称是jsessionid
sesssion就想一个map
获取与创建session
session是由服务器创建的,可以在请求对象中获得
//等同于getSession(true);
HttpSession session = request对象.getSession();
//如果当前有Session对象,就直接返回,若没有,则先创建一个再返回.
HttpSession session = request对象.getSession(true);
//如果当前有Session对象,就直接返回,若没有,则返回null.
HttpSession session = request对象.getSession(fals);
sesssion添加、修改、删除
添加
session对象.setAttribute(String name, Object value);
session.setAttribute("name",name);
删除
删除一个值:session对象·removeAttribute(String name);
删除所有值:session对象·invalidate();
修改就是添加方法,相当一重新设置一次值
session的一些设置
session.setMaxInactionveInterval(15);
这里表示上一次操作后,15秒内不再和该网页交互的话,则session就会自动摧毁,里面数据回销毁
就是说两次操作间隔不能草果15秒
一般,不用去设置这个,因为在tomcat中默认的超时时间是30分钟。
<session-config>
<!-- 间隔40分钟 -->
<session-timeout>40</session-timeout>
</session-config>
但是这里需要注意:只要浏览器关闭,session就一定会消失。

浙公网安备 33010602011771号