当前位置:首页 > 服务端 > 浅谈Cookie和Session的初步理解

浅谈Cookie和Session的初步理解

2022年08月05日 20:11:00服务端18

浅谈Cookie和Session的初步理解

前言

       HTTP是无状态的协议,客户每次读取web页面时,服务器都打开新的连接,而且服务器也不会自动维护客户的上下文信息。那么要怎么才能在多次请求之间共享信息呢?

       session和cookie就是为解决HTTP协议的无状态采用的两种解决方案。Cookie是将信息保存在客户端解决,而session则是将信息保存到服务器端解决~

       Cookie对象与HttpSession对象的作用是维护客户端浏览器与服务端的会话状态的两个对象。由于HTTP协议是一个无状态的协议,所以服务端并不会记录当前客户端浏览器的访问状态,但是在有些时候我们是需要服务端能够记录客户端浏览器的访问状态的

Cookie

       Cookie是一种保存少量信息至浏览器的一种技术,第一次请求时,服务器会响应给浏览器一些Cookie信息,第二次请求,浏览器会携带之前的cookie 发送给服务器,通过这种机制可以实现在浏览器端保留一些用户信息。为服务端获取用户状态获得依据

获取Cookie

public class Create_Cookie extends HttpServlet {
     
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        //创建Cookie
        Cookie username = new Cookie("username","alvin");
        //设置Cookie的持久化时间
        username.setMaxAge(120);
        Cookie password = new Cookie("password","123456");
        //设置Cookie的提交路径限定
        password.setPath("/aaa/bbb");
        Cookie age = new Cookie("age","10");
        Cookie gender = new Cookie("gender", URLEncoder.encode("男","UTF-8"));
        //将cookie响应给浏览器,将cookie放入响应对象中
        response.addCookie(username);
        response.addCookie(password);
        response.addCookie(age);
        response.addCookie(gender);
    }
}

提交Cookie

public class TestCookie extends HttpServlet {
     
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        //通过HttpServletRequest对象获取Cookie,返回Cookie数组
        Cookie[] cookies = request.getCookies();
        for(Cookie cookie : cookies){
     
            if(cookie.getName().equals("gender")){
     
                System.out.println(cookie.getName() + ":" + URLDecoder.decode(cookie.getValue(),"UTF-8"));
            }else{
     
                System.out.println(cookie.getName() + ":" + cookie.getValue());
            }
        }
    }
}

持久化Cookie和状态Cookie

状态Cookie

       浏览器会缓存Cookie对象,当浏览器被关闭后则会被销毁

持久化Cookie

       浏览器会对Cookie做持久化处理,基于文件形式保存在系统的指定目录中。在Windows10系统中为了安全问题不会显示Cookie中的内容

Cookie总结

       当Cookie对象创建后默认为状态Cookie。可以使用Cookie对象下的cookie.setMaxAge(60)方法设置失效时间,单位为秒。一旦设置了失效时间,那么该Cookie为持久化Cookie,浏览器会将Cookie对象持久化到磁盘中。当失效时间到达后文件删除。

       Cookie对于存储内容是基于明文的方式存储的,所以安全性很低。不要在Cookie中存放敏感数据。在数据存储时,虽然在Servlet4.0中Cookie支持中文,但是建议对Cookie中存放的内容做编码处理,也可提高安全性。

Session

Session引入和使用

       首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,每个session都会有一个sessionid,然后会将数据保存到服务器端,而sessionid会被保存在客户端的Cookie中。后续每次请求request都会携带cookie到服务器端,服务器端就会根据客户端的sessionid判断属于哪个会话。

       如果客户的浏览器不支持cookie,则服务器无法将id存放到客户端,就不能建立session对象和客户的一 一对应关系。这时就需要URL重写来实现session对象的唯一性。所谓URL重写,就是当客户从一个页面重新连接到另外一个页面时,通过向这个新的URL添加参数,把ression对象的id传带过去,这样就可以保障客户在该对站各个页面中的session对象是完全相同的。

Session和Cookie的区别

       单个cookie保存的数据不能超过4K,很多浏览器都限制一个域名保存cookie的数量。而HttpSession没有容量以及数量的限制。

       cookie数据存放在客户端,session数据放在服务器上(sessionid可以通过cookie保存在客户端,也可以使用URL重写方式)

       cookie不是很安全(可以加密),别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session

       session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie

通过Session判断用户是否登录

登录成功将用户信息存户HttpSession,否则回到登录页
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        String username = request.getParameter("username");
        String password = request.getParameter("pwd");
        if("alvin".equals(username) && "123456".equals(password)){
     
            // 将当前用户保存进入HttpSession
            User user =new User(username,password);
            HttpSession session = request.getSession();
            session.setAttribute("user",user);
            // 跳转至WEB-INF/welcome.html
            request.getRequestDispatcher("WEB-INF/welcome.html").forward(request,response);
        }else{
     
            // 登录失败,回到index,jsp
            response.sendRedirect("index.jsp");
        }
    }
用来向welcome.html中跳转的,同时验证登录,登录过,可以直接跳转,否则回到登录页
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        // 判断是否已经登录
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        // 如果登录过,直接跳转
        if(null != user){
     
            request.getRequestDispatcher("WEB-INF/welcome.html").forward(request,response);
        }else{
     
            // 没登录过,跳转至登录页
            response.sendRedirect("index.jsp");
        }
    }

作者:算法爱好者丶
来源链接:https://blog.csdn.net/qq_41424688/article/details/108416637

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/18085.html

标签: CookieSession
分享给朋友:

“浅谈Cookie和Session的初步理解” 的相关文章

session,ajax 跨域cookie

 什么是Session, 什么是Cookie? Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来存取服务器端的Session存储空间。而SessionID这一数据则...

cookie窃取和session劫持

cookie窃取和session劫持

【转】cookie窃取和session劫持 Updates 2014-08-17 感谢@搞前端的crosser的提醒,加入了HTTP Response Splitting的内容。 此篇文章的Presentation戳这里。 一、cook...

session、cookie与“记住我的登录状态”的功能的实现

Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能。 Cookie的Domain和Path属性标识了这个Cookie是哪一个网站发送给浏览器的;Cookie的Expires...

HTTP协议-Cookie和Session详解

HTTP协议-Cookie和Session详解

前言: 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的跟踪技术就是Cookie和Session。 Cookie通过在客户端记录信息确定用户身份,Session通过在服务器记录确定用户身份。 本章将系统的讲述Cookie和Sessio...

Cookie和Session的区别与联系

Cookie和Session的区别与联系

Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Sessio...

cookie、session、token之间的关系

cookie、session、token之间的关系

 Cookie机制 由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie。Cookie实际上是一小段的文本信息。Cookies是由服务器产生的。接下来我们描述一下Cookie产生的过程。浏览器第一次...

Cookie、Session和Token认证

Cookie、Session和Token认证

目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分辨链接是谁发起的,需...

Servlet之cookie和session简介及其作用

Servlet之cookie和session简介及其作用

一、cookie和session简介 1.浏览器和服务器是多对一的关系 2.业务:登录时记录账号,后续的页面上显示此账号 3.使用如下对象存储账号都不行 request:多个请求之间共用账号,不能用request c...

session(登录注销)和cookie(记住用户名和密码)的实现

session和cookie同样都可以用来保存客户资料,但是,session是把资料保存在服务器端,而cookie是把资料以文件的方式保存在客户端         &...

cookie和session的代码实现

cookie和session的代码实现

cookie和session的代码实现  1、设置cookie   今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀。   我们来看如何在response设置吧 public vo...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。