• Cookie/Session


    目录

    Cookie简介

    使用cookie的步骤:

    1.创建cookie

    2.设置最大时效

    3.把cookie放到响应头中

    那我们做一个自动登录的例子:

    session会话

    session和cookie的区别:

    session使用 

    session中的数据什么时候会失效:


    Cookie简介

    HTTP不能保存各种状态,简而言之他是一次性的。

    像我们做网站,登录的时候,点击保存密码,自动登录等,是要一直或者一段时间内存在的,但也不能一直存在,他也需要有一个失效期,要不然计算机储存的数据会越来越多。这个时候就需要cookie

    Cookie是一些数据,储存于你电脑上的文本文件中。保存HTTP状态,以键值对的形式存储在浏览器中。当下一次用户访问该网页的时候,可以在cookie里获取到之前储存的值(访问记录)

    使用cookie的步骤:

    1.创建cookie

    Cookie cookie = new Cookie("name","admin");

    2.设置最大时效

    cookie.setMaxAge(1000);

    3.把cookie放到响应头中

    resp.addCookie(cookie);

    那怎么使用cookie呢:

    cookie是用于客户端浏览器的,那肯定是需要用servlet

    我们根据真实情况来写一个使用cookie的实例:

    首先肯定是在servlet里:doGet/doPost方法

    获取网页传来的cookie:

    Cookie[] cookies = req.getCookies();

    判断这个cookie到底有没有值,有值得话就代表访问过,没有就代表没有

    1. if(Objects.nonNull(cookies) && cookies.length>0){
    2. //
    3. }else{
    4. //没有cookie
    5. }

    代码:如果有获取key和value,如果没有就发一个

    1. //1.获取cookie
    2. Cookie[] cookies = req.getCookies();
    3. if(Objects.nonNull(cookies) && cookies.length>0){
    4. //有cookie的情况(之前登陆过)
    5. System.out.println("发现了");
    6. for (Cookie cookie : cookies) {
    7. System.out.println(cookie.getName()+"->"+cookie.getValue())
    8. }
    9. }else{
    10. //没有登陆过
    11. System.out.println("没有发现cookie");
    12. //创建cookie
    13. Cookie cookie = new Cookie("name", "admin");
    14. //设置最大时效
    15. cookie.setMaxAge(8000);
    16. //把cookie放到响应头中
    17. resp.addCookie(cookie);
    18. }

    那我们做一个自动登录的例子:

    继承HttpServlet

    1. @WebServlet("/cookie.do")
    2. public class cookie extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5. String username = req.getParameter("username");
    6. String password = req.getParameter("password");
    7. if(Objects.equals(username,"admin") && Objects.equals(password,"123456")){
    8. Cookie cookie = new Cookie("username", username);
    9. cookie.setMaxAge(1000*24*60);
    10. resp.addCookie(cookie);
    11. }else{
    12. username=null;
    13. Cookie[] cookies = req.getCookies();
    14. if(Objects.nonNull(cookies) && cookies.length>0){
    15. for (Cookie cookie : cookies) {
    16. String name =cookie.getName();
    17. if("username".equals(name)){
    18. String va=cookie.getValue();
    19. username=va;
    20. }
    21. }
    22. }
    23. }
    24. if(Objects.nonNull(username)){
    25. resp.sendRedirect("success.html");
    26. }else{
    27. resp.sendRedirect("cookie.html");
    28. }
    29. }
    30. @Override
    31. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    32. doGet(req, resp);
    33. }
    34. }

     html:

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Title</title>
    6. </head>
    7. <body>
    8. <form action="cookie.do" method="post">
    9. 账户:<input type="text" name="username">
    10. 密码:<input type="text" name="password">
    11. <input type="submit" value="走你">
    12. </form>
    13. </body>
    14. </html>

    session会话

    在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

    session和cookie的区别:

    • Cookie是把用户的数据写给用户的浏览器。
    • Session技术把用户的数据写到用户独占的session中(后台)。
    • Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

    session使用 

    获取session会话

    HttpSession session = req.getSession();
    

    把username放入session中

    session.setAttribute("username",username);

    让session销毁

    session.invalidate();

    设置session过期时间

    session.setMaxInactiveInterval(3000);

    根据key的值删除对应的属性

    session.removeAttribute("");

    session中的数据什么时候会失效:

    1. 过期了
    2. 关闭浏览器(并不能完全的销毁session,JSESSIONID,根据JSESSIONID找到之前的session的)
    3. 调用session销毁的方法
  • 相关阅读:
    【fiddler】fiddler配置抓取Android端https包
    【react-笔记】
    springboot自定义表格(动态合并单元格)
    等保2.0自查表(管理部分)
    Diffusers库的初识及使用
    Vision Transformer (ViT)的原理讲解与后续革新【附上pytorch的代码!】
    锐捷Ruijie路由器版本升级
    Parallels Desktop 19.1.0 pd Mac 虚拟机解决方案
    用PyTorch轻松实现二分类:逻辑回归入门
    国考省考行测:继续讲结构分析法的分总、总分、分分、分总分、总分总的真题例题讲解,错项的特点规律
  • 原文地址:https://blog.csdn.net/weixin_49627122/article/details/126659098