Cookie,Session,Filter总结

Cookie

Cookie是一种用于在客户端存储数据的机制,Cookie是由服务端通过Cookie cookie = new Cookie("name", "value");来创建的并且通过HttpServletResponse对象的addCookie()方法将创建的Cookie发送到客户端

Cookie的存活时间和相关操作

在创建Cookie的时候如果不通过cookie.setMaxAge()方法来设置存活时间,那么这个Cookie在这个会话结束的时候就会被删除(也就是关闭浏览器后就会删除 但是关闭网页不会)

cookie.setMaxAge()设置cookie在客户端的存活时间以秒为单位 如果传入值为0则表示立即删除客户端的这个cookie 

要获取Cookie,可以通过HttpServletRequest对象的getCookies方法来获取客户端发送的所Cookie通过遍历得到的Cookie数组来匹配我们要获取Cookie的名字(name)从而得到Cookie代码如下

Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie cookie : cookies) {
        if ("tom".equals(cookie.getName())) {
            //对获取的cookie进行一系列操作
        }
    }
}

在Cookie的相关API中并没有提供修改和删除相关的方法因此我们要先通过名字获取到我们要操作的Cookie然后重新创建一个名字相同的Cookie,如果想要修改那么创建这个Cookie的时候传入修改的值即可,如果想要删除那么设置这个Cookie的setMaxAge(0)即可

Senssion

什么是Senssion

在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。注意会话状态仅在支持cookie的浏览器中保留。(当一个session第一次被启用时,一个独一的id被存储于本地的cookie中)

Session的生存时间

在tomcat中senssion的生存时间默认为30分钟 改变生存时间的方式有三种:

  1. 在web容器中设置(此处以tomcat为例)
    在tomcat-5.0.28\conf\web.xml中设置,以下是tomcat 5.0中的默认配置:
[html] view plain copy
  <!-- ==================== Default Session Configuration ================= -->  
  <!-- You can set the default session timeout (in minutes) for all newly   -->  
  <!-- created sessions by modifying the value below.    -->  
	<session-config>  
        <session-timeout>30</session-timeout>  
	</session-config>  

Tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间。

2,在工程的web.xml中设置

[html] view plain copy
<!-- 时间单位为分钟   -->  
<session-config>
      <session-timeout>15</session-timeout>
</session-config>

3,通过Java代码设置

session.setMaxInactiveInterval(30*60);//以秒为单位

三种方式优先级:1 < 2 < 3

原文连接:https://blog.csdn.net/weixin_43650254/article/details/84349037

 如何获取Session以及Session相关API

用户第一次发送HTTP请求时,服务器会检查请求中是否包含有效的Session ID,如果没有,则会创建一个新的Session对象。

获取senssion大致有两种方式

1,在拦截器中通过 HttpServletRequest request    request.getSession()来获取senssion(如果之前按已经创建过了那么就不会再创建了)

2,在接口的方法中我们也可以通过引入HttpSession接口来获取session

Session的创建和获取过程

我们在第一次创建session的时候会生成一个session的唯一标识的id这个id会和session对象一起存到服务器中 同时会创建一个cookie这个cookie中key为SESSIONID value值为创建session的id,以后我们的每一次请求都会把SESSIONID的值以cookie的形式发送到服务器 在我们调用getSession()的时候就会根据cookie中的SESSIONID来查找之前创建好的session

因为存放session的cookie是默认创建的因此这个默认创建的cookie的生存时间就是这个会话期间,当浏览器关闭后这个cookie也就不存在了,这也就是为什么我们把浏览器关闭再打开就会创建一个新的session

一些常用api

1,setAttribute(String s,Object o) 向session中设置一些属性以键值对的形式存在

2,getAttribute(String s)从session中得到对应key的value

3,invalidate( )销毁session

补充说明

在session的生存时间内,在同一网站无论我们打开多少网页服务器内的senssion均为同一个,只有打开关闭浏览器时才会生成新的senssion 即使应用程序的网页全部关闭但是浏览器没有关闭Session在存活时间内就不会再新创建

Filter

什么是filter?

它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“(servlet 链).我们可以理解为filter位于请求发出和到达servlet处理之间

如何生成一个filter

1,定义一个类实现javax.servlet.Filter包下的filter接口 实现下面三个方法:

@Override
public void init(FilterConfig filterConfig) throws ServletException {
/*
  
 */
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//在这个方法中进行过滤操作
//传递过滤 不然程序将会在这个地方卡死无法向下执行
filterChain.doFilter(servletRequest,servletResponse);
}

@Override
public void destroy() {

}

2,在web.xml中注册filter

 <filter>
        <filter-name>myfilter1</filter-name>
        <filter-class>com.bjsxt.filter.MyFilter1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myfilter1</filter-name>
        <!--通过servlet那么确定拦截的资源-->
       <!-- <servlet-name>mycontroller1</servlet-name>-->
        <!--通过请求的映射路径匹配拦截的资源-->
        <url-pattern>/mycontroller1</url-pattern>
    </filter-mapping>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值