Cookie和Seesion

既然学习了javaweb,我就肯定避免不了要去接触cookie和seesion下面简单的描述一下两者:

cookie:

在网站登录的时候,会有一个再次网站下记住密码的选项,如果你选上了,下次登录的时候就不用再重新输入账号密码,

这就cookie实现的一个小功能。

客户端通过浏览器向服务器发出请求(记住账号密码)服务器响应客户端给客户端发送一个大约4kb左右的文档存放在客

户端浏览器当中,这个文档就属于一个cookie,当用户再一次打开浏览器登录时,这时就需要你重新输入账号密码浏览器

直接从cookie中取值。

cooki的生命周期默认情况下:从客户端开启浏览器到关闭浏览器 (可以设置cookie的有效期,从而实现永久有效);

创建 cookie :           Cookie c = new Cookie("name", "value");

设置有效期:            c.setMaxAge(24 * 60 * 60);   //以秒为单位 这个是一天的时长   

设置有效路径:         c.setPath("127.0.0.1");

保存cookie:             response.addCookie(c);     //使用response将cookie保存在客户端浏览器里

删除cookie:             Cookie cookie = new Cookie(WebConst.USER_IN_COOKIE, "");

            cookie.setMaxAge(0);response.addCookie(cookie);//将cookie有效求设置为零

有一段实例代码可供参考:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           Cookie[] cookies = request.getCookies();
           if(cookies == null) {
               Cookie cookie = new Cookie("admin", "123456");
               cookie.setMaxAge(7*24*3600);
               response.addCookie(cookie);
               System.out.println("cookie为空,跳转登录页面");
               response.sendRedirect("Login.jsp");
           }else {
                 String name = request.getParameter("name");
                 String pwd = request.getParameter("pwd");
                for (Cookie cookie1 : cookies) {
                    System.out.println("用户名:"+cookie1.getName()+"密码:"+cookie1.getValue());
                    if (name.equals(cookie1.getName()) && pwd.equals(cookie1.getValue())) {
                        System.out.println("cookie不为空,跳转成功页面");
                        request.getRequestDispatcher("s.jsp").forward(request, response); 
                    }else {
                        request.getRequestDispatcher("NewFile.jsp").forward(request, response);
                    }
                }
            }
            
    }

seesion:

            seesion与cookie不同,seesion是建立在服务器的一个会话,这里讲通俗一点,seesion就相当于一个会议室,

当客户端和服务器要进行交流的时候,服务器就会分配一个小房间给他们两个进行交流,这个小房间当服务器或者客

户端任何一方退出的时候(即服务器关闭或者客户端关闭),这个小房间就会被服务器收回。这就是一个seesion会话

由于seesion是在服务端里面的一种存在,我们是不可见的所以seesion比cookie更加安全:

seesion常见的几种方法:

1、public void setAttribute(String name,String value)设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。



2、public Object getAttribute(String name)在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。



3、public void removeAttribute(String name),删除指定名字的session属性,若该属性不存在,则出现异常。



4、public void invalidate(),使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。



5、public String getId( ),获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。



6、public void setMaxInactiveInterval(int interval) 设置会话的最大持续时间,单位是秒,负数表明会话永不失效。



7、public int getMaxInActiveInterval(),获取会话的最大持续时间,使用时候需要一些处理

不要混淆 session 和 session 实现。

下面一段话来自知乎

本来 session 是一个抽象概念,开发者为了实现中断和继续等操作,将 user agent 和 server 之间一对一的交互,抽象为“会话”,进而衍生
出“会话状态”,也就是 session 的概念。而 cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。可以认为是 session
的一种后端无状态实现。而我们今天常说的 “session”,是为了绕开 cookie 的各种限制,通常借助 cookie 本身和后端存储实现的,一种更高
级的会话状态实现。所以 cookie 和 session,你可以认为是同一层次的概念,也可以认为是不同层次的概念。具体到实现,session 因为
session id 的存在,通常要借助 cookie 实现,但这并非必要,只能说是通用性较好的一种实现方案。
作者:欲三更 链接:https:
//www.zhihu.com/question/19786827/answer/84540780

上次写上面的cookie代码的时候,要验证输入框的的值是否和存的cookie相同时   我发现浏览器会同时会保存两个cookie

后来百度才了解到有一个cookie是seesion_id作为cookie保存在浏览器里,当结束这次seesion会话是第一个cookie也会随

着摧毁。

参考链接:https://www.jianshu.com/p/efee53ccd12e

                  https://www.cnblogs.com/lxr521/p/10765463.html

:个人学习QAQ ,如有错误,还请指点,谢谢qwq

你可能感兴趣的:(Cookie和Seesion)