Cookie和Session快速记忆笔记
来源:互联网 发布:豫章学院 知乎 编辑:程序博客网 时间:2024/06/05 02:03
如果一个数据在n个页面之间传递,我们可以通过Parameter来实现,但要确保每个环节不出错。为此,JavaWeb为我们提供了共享数据的技术,分别是Cookie和Session。
Cookie
此为浏览器端的共享数据技术!
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了
Cookie原理
1:创建Cookie对象.
Cookie cookie = new Cookie(String name,String value); 参数: name: 该当前Cookie取一个唯一的名字. value: 存储在Cookie的共享数据,只能是String类型. Cookie cookie = new Cookie("currentName","will");
2:把Cookie放入响应中,响应给浏览器,把共享的数据存储在浏览器中.
response.addCookie(cookie);
3:获取Cookie以及获取Cookie中的数据.因为Cookie存在在请求头中,所以应该通过request去获取.
Cookie[] cs = req.getCookies();
获取当前Cookie的名字: String name = cookie对象.getName();
获取当前Cookie的值: String value= cookie对象.getValue();
4.中文编码的问题:
//存中文Cookie cookie=new Cookie("account", URLEncoder.encode(account,"UTF-8"));//取中文account = URLDecoder.decode(cookie.getValue(),"UTF-8");
5:修改Cookie中指定属性名的属性值.
需求:修改Cookie cookie = new Cookie(“currentName”,”will”);
* 方式1:创建一个同名的新的Cookie.
Cookie c = new Cookie("currentName","Lucy");
方式2:获取该Cookie对象,通过setValue方法,重新设置新的value值.
Cookie对象.setValue("新的值");
6.设置Cookie的共享作用域:如果一个Servlet的url-pattern为/abc/xxx,而另一个Servlet的url-pattern为/cde/xxx,那么他们是无法共享数据的。但是我们可以设置统一共享的路径:
cookie.setPath("/");
如果希望不同的二级域名中可以共享Cookie,那么就要设置Cookie的domain了。例如:music.baidu.com、map.baidu.com、tieba.baidu.com,它们的域名不同,但百度希望它们之间可以共享Cookie,那么就要设置domain了:
cookie.setDomain("");
7.设置Cookie的存活时间:
//默认情况下的存活的时间是 当浏览器关闭后 共享的数据就没了 //当cookie存活时间为正数的时候 说明存活几秒 //当cookie存活时间为0的时候 说明马上失效 此操作可以在用户注销的时候使用 //当cookie存活时间为负数的时候 就是会话Cookie cookie.setMaxAge(-1);
8.Cookie的缺陷:
1):多个人使用同一台电脑的时候,可以查看浏览器的Cookie,不安全.
2):Cookie存储中文比较麻烦(得编码,再解码).
3):Cookie的value是String类型,一个Cookie就只能存储一个数据,如果需要存储多个数据,就得死还有N个Cookie.
4):一个站点对Cookie有限制:
Cookie大小限制在4KB之内;
一台服务器在一个客户端最多保存20个Cookie;
一个浏览器最多可以保存300个Cookie;
Session
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中。
1:创建和获取Session对象.
HttpSession session = request.getSession(true);如果当前请求中存在一个Session对象,就直接返回,如果不存在Session对象,就先创建一个再返回. HttpSession session = request.getSession(false);如果当前请求中存在一个Session对象,就直接返回,如果不存在Session对象,就返回null. HttpSession session = request.getSession();等价于HttpSession session = request.getSession(true);
2:往Session中存储数据.
session对象.setAttribute(String name,Object value);
3:从Session中取出数据.
Object value = session对象.getAttribute(String key);
4:删除Session(用户注销登陆).
1):删除Session中指定属性名的值. session对象.removeAttrbute("currentName"); 2):销毁Session对象(Session中所有的属性都不存在). session对象.invalidate();
5.Session的超时管理
在超时时间之内,如果客户端和服务端没有交互(用户的两次操作之间不能超过该时间),则自动的销毁Session.session对象.setMaxInactiveInterval(60 * 10);//超过10分钟,销毁Session.
Tomcat服务器的默认超时时间为:30分钟,Tomcat一般在20多分钟就销毁了。我们也可以在web.xml中设置超时时间
<!-- 浏览器与服务器两次交互的时间超过1分钟 则会删除Session --><session-config> <session-timeout>1</session-timeout></session-config>
6.URL重写.
Session是一种特殊的Cookie,而浏览器可以禁用Cookie.此时,需要在每一个资源之后,手动的携带session的ID.
/session/list;jsessionid=872870F9466CE7B3A11FD3B768FDD684String url = response.encodeURL("/session/list");自动的在资源之后拼接;jsessionid=872870F9466CE7B3A11FD3B768FDD684
注意:开发中都不会取消接受Cookie的.
7.Session的细节:
1:一般的,我们存储到Session中的属性名称,要唯一,我们习惯XXX_IN_SESSION:
- Cookie和Session快速记忆笔记
- session和cookie笔记
- cookie和session笔记
- session和cookie学习笔记
- cookie和session摘录笔记
- Session和Cookie学习笔记
- #学习笔记#(27)session和cookie
- javaweb入门笔记(5)-cookie和session
- [学习笔记2]php session和cookie
- 会话技术 cookie和session 学习笔记
- 对Session和Cookie的理解笔记
- 关于session和cookie的笔记
- cookie和session的一些笔记
- Session和Cookie学习笔记—Cookie使用
- cookie&session笔记
- cookie&session笔记
- cookie、session学习笔记
- Cookie/Session笔记
- Increasing Triplet Subsequence
- rollbackFailedOptional: verb npm-session 问题
- 清北学堂-D6-T1-divisors
- 【yum命令】软件包管理器
- 关于visual studio code在win10系统上安装后会报扩展宿主意外终止的解决方法
- Cookie和Session快速记忆笔记
- nodejs之express搭建项目-以注册登陆为例
- ios中分享的回调地址
- 数码时钟
- 如何防止别人QQ群话题发广告和批量QQ群发Q群话题
- centos下mysql数据库的安装
- [Network]TCP
- Scala集合类型详解
- < 笔记 > Java SE