欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(二十九)会话跟踪技术总结(Cookie、Session)

程序员文章站 2024-03-20 11:41:58
...

会话跟踪技术

WHY WHAT HOW

大纲

什么需要会话跟踪技术?

因为http是无状态的,不能区分用户是谁,实际上很多需求需要区分请求用户是谁

HTTP无状态:服务器不清楚哪个请求是哪个用户发送的


Cookie

Cookie是客户会话跟踪端技术

Cookie如何使用?

1.在服务端怎么创建Cookie , 
Cookie cookie new Cookie("名称","值")

2.响应,把cookie数据写回浏览器
响应对象.addCookie(cookie);

3.如何在JSP和Servlet中获取Cookie
${cookie.名称.value}

4.获取cookie数据
通过遍历 请求对象.getCookies() 返回的是一个数组 ,遍历数组
    cookie.getName(); cookie.getValue();

特点:Cookie 客户端存储技术,数据最终存在浏览器中,请求如果符合条件就会自动携带到服务器

思考: 与对比路径传参,有什么好处,有什么缺点

自己不用手动传参,相对安全一些,但不是绝对安全. 问题:还得反复校验

问题:

  • Cookie是由服务器端程序创建的
  • Cookie从服务器端带到了客户端
  • Cookie最终存在了浏览器,再一次访问服务器端资源时实现数据共享
  • Cookie中数据的传递方向:浏览器->服务器(Cookie) ->浏览器(存入)->服务器(获取Cookie数据)


Cookie存活时间

默认情况下,会话Cookie存在于内存中,浏览器关闭了,会话结束

删除Cookie

Cookie对象.setMaxAge(0);  //存的是秒数
resp.addCookie(Cookie对象); //删除后需要重新发送给浏览器去更新

Cookie的域和路径

来限制Cookie的数据,也是保护了数据


Session

Session是服务器端技术.服务器在运行时可以为每一个用户浏览器创建一个其独享的session对象

通过Cookie jessionid 字符串的唯一性

存入session的cookie是会话cookie,浏览器关闭了,对应的session就会丢失

Session API

  • getSession() :判断是否存在Session,存在则获取,不存在则创建新Session对象返回
  • setAttribute(String name,Object value) :设置属性名和属性值
  • getAttribute(String name):通过属性名获取属性值
  • removeAttribute(String name) :从Session中移除指定属性名的属性值
  • invalidate() :移除整个Session对象,删除所有的属性和属性值


Session超时管理

可以设置会话的有效时间

局部设置

session.setMAInactiveInterval(int interval)

Session属性命名 格式规范

XX_IN_SESSION ,这个属性名是唯一的

Session如何使用,有什么特点?

如何创建或获取session对象,存入数据?

HttpSession session =请求对象.getSession()

session.setAttribute("名称",值);

如何获取session 中的数据,如何移除session中的数据

session.getArrribute("名称");
session.invalidate()

若是在JSP中使用EL直接获取即可

对比Cookie Session有什么好处

相对于Cookie更安全,`还是得反复校验,但是不用去数据库