Java Web中Session和Cookie的区别,看这一篇就够了

Java Web中Session和Cookie的区别,看这一篇就够了

引文

会话跟踪技术是用来跟踪用户的会话,并且保持对用户会话之间的数据管理。其中常用的会话跟踪技术是CookieSession

1、Cookie

Cookie是客户顿请求服务器端后,服务器给客户端的一个标识,并保存在客户端中

当客户端再次向服务器端发送请求时,会携带该标识,服务器就可以根据标识来识别客户端的身份或者状态。

1.1Cookie的应用

1.保持用户登录状态

将用户信息保存到Cookie中,并发送到浏览器中。将有效时间设置为一个较长的时间,这样子下次浏览器在进行访问一个网站时,服务器还能根据标识来识别用户。根据识别用户,用户就不需要输入用户名和密码等信息。

2.记录用户名

⼀旦⽤户登录成功以后,下次再登录时,直接将Cookie中的⽤户名读取并显示出来,这样⽤户就不需要再次输⼊⽤户名,只输⼊密码即可。

[举例1] Cookie保持登录信息状态&删除Cookie**

1.首先在重写的post方法中创建Cookie对象。根据对象与信息的匹配处理,返回到JSP页面进行响应。

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、输出信息。
        req.setCharacterEncoding("utf-8");
        String uname=req.getParameter("username");
        String upass=req.getParameter("password");
        System.out.println(uname+": "+upass);
        if ("小艾扶".equals(uname)&&"123".equals(upass)){
            //登陆成功
            System.out.println(uname+": "+upass);
            resp.sendRedirect("success.jsp");
        }
        else{
            //1.创建cookie对象
            Cookie cookie = new Cookie("un",uname);
            //2.设置Cookie的有效时间。当前时间为0.进行如上举例时要切记删掉。
            cookie.setMaxAge(0);
            //3.返回给前端
            resp.addCookie(cookie);
            resp.sendRedirect("index.jsp");
        }
    }
  • 上面重写的是doPost方法,因为在进行登录注册时候,对信息是较为保密的状态。进行post对安全性更加严谨。doGet方法可以仍意补充。
  • 后续在创建cookie对象时,需要声明好进行标识的地方(例如我上面只标识了账号名)。声明之后进行返回给前端进行响应。
  • 如果需要进行删除Cookie时,将第16行代码加上~。

2.其次在项目中的index.jsp中将响应回来的cookie对象进行处理,并显示于前端的界面中。

<body>
  <%
    Cookie[] cookies = request.getCookies();
    String value="";
    if(cookies.length>0){
      //先判断里面是否有内容
      for (Cookie cookie:cookies){
        if (cookie.getName().equals("un")){
          value=cookie.getValue();
          break;
        }
      }
      pageContext.setAttribute("unamecookie",value);
    }
  %>
  <form action="login" method="post">
    登录:<input type="text" name="username" value="${unamecookie}"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="提交">
  </form>
  </body>
  • 首先写入一个<form>表单,它将模拟一个登录的简单功能。
  • <%%>中填下如上代码。首先是获取java文件中获取cookie信息,对长度进行判断(如果为空的时候,直接进入for循环会有报错的现象呢!)。
  • 可以进行存值操作,也可以设置一个全局变量直接进行传参并在登录的<input>中添加value值。

最后会发现登陆之后返回,账号名会自动出现在上面哟~

1.2 Cookie的有效时间

  • Cookie发送给浏览器以后,浏览器并不会永久保存,也就是到了⼀定的时间以后浏览器会⾃动销毁 Cookie。Cookie的默认有效时间为⼀次会话(⼀次打开关闭浏览器的过程)
  • 同样的如上例子一样,我们可以⼿动指定Cookie的有效时间
//setMaxAge⽤来设置Cookie的最⼤有效时间,需要int型的参数,代表有效的秒数
 cookie.setMaxAge(秒数)//当参数⼤于0时,会设置为指定的秒数
 cookie.setMaxAge(30);
 //当参数等于0时,浏览器不会保存Cookie,Cookie⽴即失效
 cookie.setMaxAge(0);
 //当参数⼩于0时,和不设置是⼀样,当前会话有效
 cookie.setMaxAge(-100);
 //设置⼀个永久有效的Cookie,并⾮永久,只是使Cookie的⽣命很⻓⽽已
 cookie.setMaxAge(60*60*24*365*10);

2、Session

在前面的学习中知道,Session主要进行的是会话的机制。但与此同时,Session是另一种记录客户状态的机制。

  • Session主要保存在服务器中而非像Cookie存放在客户端浏览器中。
  • 客户端浏览器访问服务器的时候,服务器将客户端信息以某种形式记录在服务器上,这就是Session。

如果说Cookie机制是通过检查客户身上的“通⾏证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”确认客户身份。Session相当于程序在服务器上建⽴的⼀份客户档案,客户来 访的时候只需要查询客户档案表就可以了。

2.1 创建Session的格式

对于Session而言,它对应的类是为javax.servlet.http.HttpSession类。每个来访者对应⼀个Session对象,所有该客户的状态信息都保存在这个Session对象⾥。Session对象是在客户端第⼀次请求服务器的时候创建的。

Session也是⼀种**key-value的属性对**,通过getAttribute(Stringkey)setAttribute(String key, Objectvalue)⽅法读写客户状态信息。Servlet⾥通过request.getSession()⽅法获取该客户的Session

HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性
out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取(将其转换为Data对象进行获取时间)
//Session属性

2.2 Session的生命周期

  • 前面介绍到,Session保存在服务器端。但是为了获得更高的存取速率,服务器一般将Session放在内存中。每一个用户都有一个独立的Session
  • 如果Session内容过于繁多,则容易造成内存溢出。
  • 因此在进行Session应用是时更多将其信息言简意赅
生命周期步骤如下:
  1. 首先在进行第一次访问时,服务器会自动创建Session。(只有访问JSP、Servlet等程序时才会创建 Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未⽣成Session,也可以使 request.getSession(true)强制⽣成Session。)
  2. 由于越来越多的用户进行访问,Session会越来越多。
  3. 为了防止内存溢出,服务器会将长时间没有活跃的session将内存中删除。这就是session的超时时间。如果超过该超时时间没有访问服务器,那么Session就会自动失效。

2.3 Session的常用方法

如上所示,这些都是Session的常用方法。

3、Cookie和Session的区别

  1. Cookie数据保存在客户端,Session数据保存在服务器端
  2. Session是由应⽤服务器维持的⼀个服务器端的存储空间,⽤户在连接服务器时,会由服务器⽣成⼀个唯⼀的SessionID,⽤该SessionID 为标识符来存取服务器端的Session存储空间。⽽SessionID这⼀数据则是保存到客户端,⽤Cookie保存的,⽤户提交⻚⾯时,会将这⼀SessionID提交到服务器端,来存取 Session数据。这⼀过程,是不⽤开发⼈员⼲预的。所以⼀旦客户端禁⽤Cookie,那么Session也会失效
  3. Cookies是属于Session对象的⼀种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者⼀个Cookie的⽂本⽂件中;⽽Session则会占⽤服务器资源。所以,尽量不要使⽤Session,⽽使⽤ Cookies。但是我们⼀般认为Cookie是不可靠的,Cookies是保存在本机上的,但是其信息的完全可⻅性且易于本地编辑性,往往可以引起很多的安全问题Session是可靠地。但是⽬前很多著名的站点也都⽤Cookie。

4、过滤器

4.1 过滤器的基本概念

过滤器就是对web资源进⾏拦截,通过做⼀些处理后再交给下⼀个过滤器servlet处理,通常都是⽤来拦截request进⾏处理的,也可以对返回的response进⾏拦截处理

4.2 过滤器的语法格式

1.创建一个类,实现Filter接口。

public class CharSetFilter implements Filter{}

2.重写接口中的方法

public void destroy() { //销毁的⽅法}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain
chain) throws ServletException, IOException {
 //过滤⽅法 主要是对request和response进⾏⼀些处理,然后交给下⼀个过滤器或
Servlet处理
 chain.doFilter(req, resp);
 }
 public void init(FilterConfig config) throws ServletException {
 /*初始化⽅法 接收⼀个FilterConfig类型的参数 该参数是对Filter的⼀些配置*/
 }

3.在web.xml中进行设置

<filter>
 <filter-name>过滤器名称</filter-name>
 <filter-class>过滤器所在的路径</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>过滤器名称</filter-name>
 <url-pattern>需要过滤的资源</url-pattern>
 </filter-mapping>

4.3 使用场景

1.如何防⽌⽤户未登录就执⾏后续操作

String name=(String)session.getAttribute("key"); 

if(name==null){ 

//跳转到登录⻚⾯ 

} 

2.设置编码⽅式–统⼀设置编码

3.加密解密(密码的加密和解密)

4.⾮法⽂字筛选

5.下载资源的限制

过滤器的特点:在servlet之前和之后都会被执⾏

5、监听器

监听就是在监听某个域对象的状态变化的一个组件。

5.1 监听器的相关概念:

  • 事件源:被监听的对象(三个域对象 request、session、servletContext)
  • 监听器:监听事件源对象事件源对象的状态的变化都会触发监听器
  • 注册监听器:将监听器与事件源进⾏绑定
  • 响应⾏为:监听器监听到事件源的状态变化时所涉及的功能代码(程序员编写代码)

5.2 监听器分类

  • 横轴按照被监听的对象划分:ServletRequest域、HttpSession域、ServletContext域
  • 纵轴按照监听的内容分:监听域对象的创建与销毁监听域对象的属性变化

5.3 监听三大域对象的创建与销毁

监听器的编写步骤(重点)

  • 编写⼀个监听器类去实现监听器接⼝
  • 覆盖监听器的⽅法
  • 需要在web.xml中进⾏配置—注册
对象作用生命周期
ServletContextListener监听ServletContext域的创建与销毁的监听器创建:服务器启动创建
删除:服务器关闭
HttpServletListener监听HttpServietListener域的创建和销毁的监听器创建:第一次调用request.gerSession方法时创建
销毁:服务器关闭销毁,Session过期
ServletRequestListener监听ServletRequest域的创建与销毁的监听器创建:每一次创建时会调用一次request
销毁:请求关闭

ServletContextListener的作用:

  • 初始化工作:初始化对象、数据
  • 加载初始化的一些配置文件(spring配置文件)
  • 任务调度(定时器—Timer/TimerTask)

HttpServletListener的作用:

默认创建Session下,可以统计网站访问的用户

总结

以上就是针对Cookie和Session的全部内容。这里稍微查阅翻阅资料,但是还请大家认真阅读。谢谢大家的阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xiao艾扶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值