前言 :
什么是会话?
会话是指浏览器访问服务器,访问结束关闭浏览器
为什么需要会话技术?
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,服务器不能确认多次请求是否来自与同一个客服端,如果说我们要实现购物车添加或删除商品的功能的话,我们就需要使用到Cookie和Session技术。Cookie和Session是域对象。
具体实现:
例如我们在淘宝页面登录我们自己的账号,下次登录时我们就不需要再次输入账号和密码,直接就可以登录了。这是怎么做到的呢具体实现是使用到了会话技术(Cookie,Session),第一次输入账号密码登录时,我们会将数据提交到服务器,服务器会生成一个CookieId(Cookie数据),返回给客户端,下次登录时,客户端会将CookieId(Cookie数据)携带给浏览器,服务器会根据CookieId来识别是否是同一个客户端。
Cookie(一次会话中多次请求间数据共享问题)
作为后端程序员我们只需要学会Cookie的基本使用(获取Cookie和发送Cookie)
1 发送 Cookie
Cookie cookies = new Cookie("key","value");//获取Cookie对象
response.addCookie(cookies);//发送Cookie
2 获取Cookie对象
request.getCookie();//获取Cookie数组
for (Cookie cookie : cookies)//遍历Cookie
if("username".equals(name)) {//取出自己想要的Cookie
String value = Cookie.getValue();
System.out.println(name + value);
}
Cookie细节:
细节 :
设置Cookie的存活时间(在发送对象前)
- 整数表示将Cookie写入浏览器所在本机硬盘中,持久化存储
- 负数表示关闭浏览器,Cookie对象将会被销毁
- 0表示将删除Cookie对象
cookies.setMAXAge(min)
Cookie存储中文(Cookie不支持中文,要进行编码解码)
在获取Cookie数据前编码
package cookie;/**
* @author 三月水
* version 0.5
* 演示客服端会话技术
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.net.URLEncoder;
@WebServlet("/aservlet")
public class Aservlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取Cookie对象
String value = "张三";
value = URLEncoder.encode(value,"utf-8");
System.out.println("存储数据"+value);
Cookie cookie = new Cookie("username",value);
//发送Cookie
response.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
在获取Cookie数据后解码
package cookie;/**
* @author 三月水
* version 0.5
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.net.URLDecoder;
@WebServlet("/Bservlet")
public class Bservlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
String name = cookie.getName();
if ("username".equals(name)) {
String value = cookie.getValue();
//获取数据之后解码
value = URLDecoder.decode(value, "utf-8");
System.out.println(name + ":" + value);
}
break;
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
this.doGet(request, response);
}
}
** 核心编解码方法**
URLEncoder.encoder(value,"字符集");//编码
URLDecoder.decoder(value,"字符集");//解码
Session
Session是基于Cookie的,Session实现了HttpSession。
基本使用:
@WebServlet("/demo1")
HttpSession session = request.getSession();//获取Session对象
seession.setAttribute("key","value");
@WebServlet("/demo2")
HttpSession session = request.getSession();//获取Session对象 这里Session对象是同一个
seession.getAttribute("key");
怎么知道他们的Sesion对象是同一个呢?(可以输出session引用,对比地址值)
Session细节:
1.服务器关闭了,Session会被关闭吗? (不会)
钝化 :服务器正常关闭后,Tomcat会自动将Session数据写入硬盘文件中
活化 :再次启动服务器后,会从文件中加载数据到Session中
Session销毁
默认销毁时间为30分钟,可以再xml配置中,修改销毁时间一般修改为100分钟
1 web.xml文件中添加配置
<Session config>
<Session timeout>100</Session timeout>
</Session config>2 Session.invalidate();//销毁
Cookie 和 Session区别
安全性 : Cookie 不安全(存储客户端,经常通过HTTP协议传输数据到服务器)
Session 安全 (存储在服务器)
数据大小 :
Cookie 大小限制3kb
Session 大小无限制
存活时间:
Cookie 长期存活(几个月至1年)
Session 存活(默认30分钟)
服务器性能:
Cookie不占用服务器资源
Session占用服务器资源
版权归原作者 三月水_ 所有, 如有侵权,请联系我们删除。