zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDU_2191_多重背包
    HDU_1494_dp
    POJ_1088_dfs
    所有的畅通工程[HDU1232][HDU1874][HDU1875][HDU1879]
    畅通工程[HDU1863]
    还是畅通工程[HDU1233]
    最小生成树
    Who's in the Middle[HDU1157]
    Bungee Jumping[HDU1155]
    Is It A Tree?[HDU1325][PKU1308]
  • 原文地址:https://www.cnblogs.com/2979100039-qq-con/p/12546324.html
Copyright © 2011-2022 走看看