cookie和session

校验登录的是,把user加到session里,在controller层里实现的,然后再拦截器里校验是否有user,如果是空,则重定向到登录页面,如果不是空则返回正确,继续走下面的

在controller 层里httpSession.setAttribute("user",userDo);

无状态是指服务器不知道客户端是什么状态。
HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变,这个结果。

HTTP无状态的,特性严重阻碍了这些交互式应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。
于是,两种用于保持HTTP状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

Session

概念
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息, 那么要怎么才能实现会话跟踪呢?session就是一种保存上下文信息的机制,它是针对每一个用户的, 变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的 ,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出返回给客户端Cookie保存。

添加session有两种方式 一种是Httpsession httpsession 一种是用注解 @SessionAttributes,注意有一个坑,注解的方式不能用ModelAndView ,只能用 model 或者modelmap。Httpsession 可以用modelandview 或者modelmap 都行

获取
1.从request获取
HttpSession session = request.getSession();
2.方法传入进来
public void method(HttpSession httpsession);
HttpSession session
session.setAttribute(“username”,1);
session.setAttribute("password“,2);
session.setMaxInactiveInterval(30*60); 以秒为单位,即在没有活动30分钟后,
session将失效
springboot 默认失效时间30*60 半个小时
自定义时间applicaiton里面设置(秒单位):
server.session.timeout=60
设置马上失效:request.getSession().invalidate();

httpSession.invalidate();清除session的方法

清除session的方式也不一样,

@SessionAttributes注解的方式,这个 只能用model 或者modelmap,不能用modelandview

 

@SessionAttributes: 将模型中的某个属性暂存到HttpSession 中, 以便多个请求之间可以共享这个属性 在默认情况下ModelMap 中的属性作用域是 request 级别是, 也就是说,当本次请求结束后,ModelMap 中的属性将销毁。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中如果希望在多个请求中共享 ModelMap 中的属性,必须将其属性转存到 session
中, 这样 ModelMap 的属性才可以被跨请求访问。注意:SessionAttributes里面的值必须在的model有才能被自动加进去,入参有这个属性没问题,如果没有这个属性需要在入参加ModelMap,然后主动set进去没有的话是获取不到session  的,modelAndView.addObject("loginUser", loginUser);不生效,
这是个坑,源码类ModelFactory.updateModel方法与HttpSession 区别在于自动设置session信息
HttpSession是放在request上的,
SessionAttributes是放在SessionAttributesHandler上的
设置失效
httpSession: httpSession.removeAttribute("loginUser");
httpSession.invalidate();
SessionAttributes:要用SessionStatus.setComplete() 清除session

语法
@SessionAttributes要放在类上面
两种设置: (前提名称和model属性一致,也就是Model里面有才行)
1. names与values一样(按照model里面的属性名)
@SessionAttributes(value={“user1”, “user2”})
自动把”user”和”user2”放进SessionAttributes里面
2. types (按照model里面的类型)
@SessionAttributes(types={User.class, Dept.class})
types的话,会自动把所有你设置的类型数据放到session里面
1.然后在页面获取session
2.在另外一个controller方法获取session
页面获取session:${Session.name!"default value"}

session失效时间是从,最后一次请求时间,开始计算。

cookie失效是按照,自然时间计算失效

当cookie失效,session也会失效,ServletRequestAttributes 是http的最大的所有的请求内容,可以理解为一个map

ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest httpServletRequest =requestAttributes.getRequest();

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值