[Javaweb 03] Cookie&Session
Cookie & Session
中文乱码解决:
中文字符串快速编码和解码
String s = URLEncoder.encode("中文字符串", "utf-8");
String s_decode = URLDecoder.decode(s, "utf-8");
1. 会话
从浏览器打开到关闭的过程,称为会话
有状态会话:知道访问过这个网站,
2. 保存会话的两种技术
cookie:客户端技术(通过响应给客户端,通过请求个服务端)
session:服务器技术(可以保存用户的会话信息, 可以把信息或者数据放在Session中)
常见例子: 网站登录之后,下次不用再登录。
:Cookie和Session都类似于一个字典,cookie的键值对都是String, Session的键值对是String :Object
:对两者的操作都是通过req对象获取的,但实际session的创建是服务器创建的
3. Cookie
Cookie[] cookies = req.getCookies();//服务端获得cookie
//for.cookies中获取到每一个cookie后
String name = cookie.getName();//获取cookie的键
String lastTime = cookie.getValue();//获取cookie的值
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//设置cookie
cookie.setMaxAge(24*60*60)//设置cookie的过期时间,单位为秒
resp.addCookie(cookie);//把新设置的cookie给客户端
cookie的限制:
- 一个cookie只能保存一个信息;
- 一个web站点可以给浏览器发送多个cookie, 最多存放20个;
- cookie大小限制为4kb;
- 300个cookie是浏览器的上限
删除cookie:
-
不设置有效期,关闭浏览器,自动失效;
-
设置有效期为0s,
//创建一个cookie, 键和要删除的cookie一样,设置有效期为0, resp.addCookie()返回去
4. Session
1. session:
- 服务器给每一个浏览器(用户)创建一个session对象;
- 一个session独占一个浏览器,只要浏览器没有关闭,session就存在
- 用户登录后,整个网站都可以访问,eg:保存的用户信息,保存的购物车
2. Session和cookie的区别:
- cookie把用户的数据写给浏览器,浏览器保存(浏览器可以保存多个)
- session把用户的数据写到用户独占的session中,服务器中保存(保存重要信息,减少服务器资源浪费)
- Session对象由服务器创建,只要打开浏览器就存在。
3. Session使用:
session.setAttribute(String key, Object value);
session.getAttribute(String key);
session.removeAtribute(String key);
session.getID();
4. session创建中实际做了什么:
- 服务器new了一个key为JSESSIONID的cookie
- 服务器响应回去:resp.addCookie(cookie),
5. 设置session的过期:
-
手动注销:
HttpSession session = req.getSession(); session.invalidate();//注销session
-
会话时长过期,自动注销:
<!--在web.xml中设置--> <session-config> <!--时间单位是分钟--> <session-timeout>15</session-timeout> </session-config>
6. Session使用常见:
保存登录用户的信息;购物车信息,整个网站中常用到的信息
5. Context, Session, Cookie作用域
-
Cookie:
请求后,服务器发送一个cookie给浏览器,浏览器之后请求时携带该cookie
-
Session:
浏览器访问服务器,服务器登记一个Session,返回给用户一个sessionID(其实就是一个Cookie),但服务器中注册的Session可以存放用户的其他东西。
-
Context:
如果要统计访问的人数,或者两个用户需要由共享的资源,则放置在Servlet的更上一层:ServletContext中,也叫ApplicationContext。