会话跟踪:Cookie&Session

会话:用户打开浏览器访问web服务器资源所建立的会话,直到一方断开,会话结束,其中可以包含多次请求和响应

会话跟踪:服务器识别多次请求是否来自同一浏览器,以便多次请求间共享数据

HTTP协议是无状态的,每次发送请求,服务器都会视为新的请求,所以我们需要会话跟踪技术来实现会话内数据的共享

实现方式:

1.客户端会话跟踪技术:Cookie

2.服务端会话跟踪技术:Session

Cookie:

浏览器发送请求到服务器,服务器会生成Cookie然后再发送给浏览器

浏览器访问都是通过Servlet,在Servlet中进行创建和接收Cookie

创建Cookie对象(第一次访问)

String value = "张三";

String url = URLEncode.encode(value,"utf-8");

sout(url)

Cookie c = new Cookie(“key”,“url”);

c.setMaxAge(60*60*24*7);

resp.addCookie(c);

获取Cookie(在同次会话中)

Cookie[] cc = req.getCookies();

for(Cookie c1 : cc ){

String name = req.getName();

if("key".equals(name)){(因为访问服务器的会话有很多,如果需要获取指定的cookie需要进行判断)

String value = req.getValue();

URLDecode.decode(value,"url")

sout(name+":"+value);

}

cookie原理:

cookie的实现原理是基于http协议的

响应头:set-cookie

请求头:cookie

cookie使用细节:

存活时间:

存活时间:setMaxAge(int s),正数:存活之间,负数:默认值,关闭浏览器,则cookie被销毁,零:删除对应cookie

存储中文:

cookie不能直接存储中文

需要用url编码转码

Session:

服务端会话跟踪技术:将数据保存到服务端

javaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能

servlet1

HttpSession session = req.getSession();//获取Session对象
session.setAttribute("username","zs");//存储数据到Session域中

servlet2

HttpSession session = req.getSession();
Object username = session.getAttribute("username");//根据key获取值
System.out.println(username);

void removeAttribute(String name):根据key,删除该键值对

session原理:

Session是基于Cookie实现的

session在创建的对象的时候是有唯一标识的,tomcat识别到HttpSession之后会将唯一表示发送给浏览器(set-cookie:JSESSIONID=10),当第二次请求时服务器会接收到id并在服务器搜索对应id值

使用细节:

session的钝化、活化:

服务器重启后,Session中的数据是否还存在?存在

钝化:在服务器正常关闭,注意是正常关闭后,tomcat会自动将session数据写入硬盘的文件中

活化:再次启动服务器后,从文件中加载数据到Session中

session销毁:

默认情况下,无操作,30分钟自动销毁

可以在web.xml中设置

<session-config>

<session-timeout>30</session-timeout>

</session-config>

或可以调用Session对象的invalidate()方法进行销毁(一般应用于用户点击账户退出操作)

小结:

cookie和session都是来完成一次会话多次请求间的数据共享的

区别:

1.存储位置:cookie是将数据存储在客户端,session是将数据存储在服务端

2.安全性:cookie不安全,session安全

3.数据大小:cookie最大3kb,session无大小限制

4.存储事件:cookie可以长期存储,session默认30分钟

5.服务器性能:cookie不占服务器资源,session占用服务器资源

实际场景应用:

购物车:以前是不用登录就可以添加用cookie,现在是得登录之后才可以添加

偏好设置:背景色、样式等,长期存储用cookie

登录成功后用户名展示:安全数据,需要用session

记住我:长时间cookie(但有泄露信息风险,现在一般都不用)

验证码:为了防止暴力注册,得用session

cookie一般保存的是用户登录之前的数据

session一般保存的是用户登录之后的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值