Session

##JSP
    
    1. 概念:
        * Java Server pages:java服务器端页面
            * 可以理解为:一个特殊的页面,其中既可以直接定义html的标签,又可以定义java代码
            * 用于简化书写!
    2.原理
        * JSP本质上就是一个Servlet
    3. JSP的脚本: JAVA定义JAVA代码的方式:
        1. <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么
        2. <%! 代码 %> :定义的java代码,在jsp转换后的java类的成员位置。
        3. <%= 代码 %> :‘=’相当于输出语句,定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么
    4. JSP内置对象:
        * 在jsp页面中不需要去创建获取,就可以直接使用的对象
        * jsp一共有9个内置对象。
        * 今天学习:
            * request
            * response
            * out:字符输出流对象,可以将数据输出到页面上。和response.getWriter()类似
                * response.getWriter()和out.writer()的区别:tomcat给客户端做出响应之前,会先去找response的缓冲区,再去找out的缓冲区。out在定义的位置输出,而response先于out输出
                
##Session
    1. 概念:服务器端会话技术,再一次会话的多起请求间共享数据,将数据保存在服务器端的对象中。HttpSession
    2. 快速入门:
        1. 获取HttpSession对象:
            request.getSession()
        2. 使用HttpSession对象:
            getAttribute()
            setAttribute()
            removeAttribute()
    3. 原理
        * Session的实现是依赖于Cookie 的
    4.细节:
        1. 当客户端关闭后,服务器端不关闭,两次获取的session是同一个吗
            * 默认情况下不是(客户端关闭,cookie关闭,没有对应的cookie 头,session是依赖于cookie的)
            * 期望客户端关闭后,session也能相同。
                1. 创建cookie,键为JSESSION    Cookie c = new Cookie("JSESSION",session.getId());
                2. 设置cookie的最大存活时间 c.setMaxAge(60 * 60);
                                            response.addCookie(c);
        2. 客户端不关闭,服务器端关闭,两次获取的session是同一个吗
            * 不是同一个,但是要确保数据不丢失
                * session的钝化
                    * 在服务器正常关闭之前,将session对象序列化到硬盘上
                * session的活化
                    * 在服务器启动后,将session文件转化为内存中的session对象即可。
                        * tomcat服务器可以进行session对象的序列化和反序列化,而idea可以序列化但是不能够反序列化读取session对象(先删除work文件再重新创建)
        3. session什么时候被销毁?
            1. 服务器关闭
            2. session对象去调用一个方法invalidate();
            3. session默认失效时间是30分钟(可以设置默认失效时间,在tomcat目录下web.xml的<session-config>标签内)
    5. session的特点:
        1. session用于存储一次会话的多次请求的数据,存在服务器端
        2. session可以存储任意类型,任意大小的数据
        
        * session与cookie的区别:
            1. session存储数据在服务器端
            2. session没有数据大小限制,cookie有
            3. session数据安全,cookie相对于不安全
            
================================================================================================
验证码案例:
    分析:1.设置request的编码
        2. 获取参数Map集合
        3. 获取验证码
        4. 将用户信息封装到user对象
        5. 先判断程序生成的验证码和用户输入的验证码是否一致(减小数据库的开销)。从session中获取程序生成的验证码。
            * 一致:
                * 再判断用户名和密码是否正确
                    * 正确:
                        * 登录成功
                        * 存储数据 session
                        * 跳转到successjsp(重定向)
                    * 不正确:
                        1. 给提示信息
                        2. 跳转登录页面
            * 不一致:1. 给用户提示信息,验证码错误(request)
                      2. 跳转登录页面,转发

原文地址:https://www.cnblogs.com/zlnice/p/9555100.html