servlet之session&cookie

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】 阅读详情

会话技术

可以简单理解为:浏览器打开到关闭就是一次会话

session和cookie可以实现会话跟踪技术,功能有重叠一般结合使用

session和cookie结合使用的例子:用户访问浏览器,服务器生成JESSIONID,JESSIONID是一个cookie,每次http请求会携带此cookie,用来让服务器知道选择哪个session,即JESSIONID相当于session的id。(因为服务器中存这好多用户的会话session),这个过程由服务器自动完成。

会话技术可以:记住浏览的商品,可以识别用户,可以实现会话时间内免登录

Cookie

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sDgXvuCk-1607248393480)(C:\Users\hello\AppData\Roaming\Typora\typora-user-images\image-20201106203324859.png)]

简单使用:


        //设置response的编码
        response.setContentType("text/html;charset=UTF-8");

        //创建Cookie对象,指定名称和值
        Cookie cookie = new Cookie("username", "zhongfucheng");
        
        //向浏览器给一个Cookie
        response.addCookie(cookie);

        response.getWriter().write("我已经向浏览器发送了一个Cookie");

cookie存储中文

  • 中文属于Unicode字符,英文数据ASCII字符,中文占4个字符或者3个字符,英文占2个字符。
  • 解决:Cookie使用Unicode字符时需要对Unicode字符进行编码负责出现异常。
    response.setContentType("text/html;charset=UTF-8");
        PrintWriter printWriter = response.getWriter();

        String name = "中国";
              //对Unicode字符进行编码
        Cookie cookie = new Cookie("country", URLEncoder.encode(name, "UTF-8"));
        cookie.setMaxAge(2000);//存在了硬盘上
        response.addCookie(cookie);

        printWriter.write("我颁发了一个Cookie,值保存的是中文数据");

取出时进行解码:

   Cookie[] cookies = request.getCookies();
        for (int i = 0; cookies != null && i < cookies.length; i++) {
            String name = cookies[i].getName();

            //经过URLEncoding就要URLDecoding
            String value = URLDecoder.decode(cookies[i].getValue(), "UTF-8");

            printWriter.write(name + "------" + value);
        }

cookie有效期

Cookie的有效期是通过setMaxAge()来设置的。

  • 如果MaxAge为正数,浏览器会把Cookie写到硬盘中,只要还在MaxAge秒之前,登陆网站时该Cookie就有效【不论关闭了浏览器还是电脑】
  • 如果MaxAge为负数,Cookie是临时性的,仅在本浏览器内有效,关闭浏览器Cookie就失效了,Cookie不会写到硬盘中。Cookie默认值就是-1。这也就为什么在我第一个例子中,如果我没设置Cookie的有效期,在硬盘中就找不到对应的文件。
  • 如果MaxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie对应的方法,把MaxAge设置为0等同于删除Cookie

cookie的删除和修改

我们已经知道了Cookie机制没有提供删除Cookie的方法。其实细心点我们可以发现,Cookie机制也没有提供修改Cookie的方法。那么我们怎么修改Cookie的值呢?

Cookie存储的方式类似于Map集合

修改:

Cookie的名称相同,通过response添加到浏览器中,会覆盖原来的Cookie

删除:

除了名称相同外,设置setMaxAge(0)为零

        String name = "看完博客就点赞";

        //对Unicode字符进行编码
        Cookie cookie = new Cookie("country", URLEncoder.encode(name, "UTF-8"));

        //一定不要忘记添加到浏览器中
        cookie.setMaxAge(0);
        response.addCookie(cookie);

        printWriter.write("我删除了该Cookie");
  • 注意:删除,修改Cookie时,新建的Cookie除了value、maxAge之外的所有属性都要与原Cookie相同。否则浏览器将视为不同的Cookie,不予覆盖,导致删除修改失败!

Cookie的domain

  • Cookie的隐私安全机制决定Cookie是不可跨域名的。也就是说www.baidu.com和www.google.com之间的Cookie是互不交接的。即使是同一级域名,不同二级域名也不能交接,也就是说:www.goole.com和www.image.goole.com的Cookie也不能访问
  • 现在我希望一级域名相同的网页Cookie之间可以相互访问。也就是说www.image.zhongfucheng.com可以获取到www.zhongfucheng.com的Cookie就需要使用到domain方法。
        Cookie cookie = new Cookie("name", "ouzicheng");
        cookie.setMaxAge(1000);
        cookie.setDomain(".zhongfucheng.com");
        response.addCookie(cookie);

        printWriter.write("使用www.zhongfucheng.com域名添加了一个Cookie,只要一级是zhongfucheng

Cookie的path

  • 一般地,Cookie发布出来,整个网页的资源都可以使用。现在我只想Servlet1可以获取到Cookie,其他的资源不能获取。
  • 使用Servlet2颁发一个Cookie给浏览器,设置路径为"/Servlet1"。
        Cookie cookie = new Cookie("username", "java");
        cookie.setPath("/Servlet1");
        cookie.setMaxAge(1000);
        response.addCookie(cookie);

        printWriter.write("该Cookie只有Servlet1获取得到");

cookie应用

详情查看3y的github

1. 记录上次访问时间

先检查(遍历)所有Cookie有没有我要的,如果得不到我想要的Cookie,Cookie的值是null,那么就是第一次登陆

   SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter printWriter = response.getWriter();



        //获取网页上所有的Cookie
        Cookie[] cookies = request.getCookies();

        //判断Cookie的值是否为空
        String cookieValue = null;
        for (int i = 0; cookies != null && i < cookies.length; i++) {

            //获取到以time为名的Cookie
            if (cookies[i].getName().equals("time")) {
                printWriter.write("您上次登陆的时间是:");
                cookieValue = cookies[i].getValue();
                printWriter.write(cookieValue);

                cookies[i].setValue(simpleDateFormat.format(new Date()));
                response.addCookie(cookies[i]);
                
                //既然已经找到了就可以break循环了
                break;
            }
        }

        //如果Cookie的值是空的,那么就是第一次访问
        if (cookieValue == null) {
            //创建一个Cookie对象,日期为当前时间
            Cookie cookie = new Cookie("time", simpleDateFormat.format(new Date()));

            //设置Cookie的生命期
            cookie.setMaxAge(20000);

            //response对象回送Cookie给浏览器
            response.addCookie(cookie);

            printWriter.write("您是第一次登陆啊!");
        }
2. 记录浏览的商品

session

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZEftCpM-1607248393483)(C:\Users\hello\AppData\Roaming\Typora\typora-user-images\image-20201106220950034.png)]

如果说Cookie是检查用户身上的”通行证“来确认用户的身份,那么Session就是通过检查服务器上的”客户明细表“来确认用户的身份的。Session相当于在服务器中建立了一份“客户明细表”

session使用

存:

 //得到Session对象
        HttpSession httpSession = request.getSession();
        
        //设置Session属性
        httpSession.setAttribute("name", "看完博客就要点赞!!");

取:

     //获取到从Servlet4的Session存进去的值
        HttpSession httpSession = request.getSession();
        String value = (String) httpSession.getAttribute("name");
        System.out.println(value);

session 生命周期和有效期

  • 一个session存在于浏览器打开到关闭的时间内,且session还有setMaxInactiveInterval来设置其存活时间。如果关闭浏览器,或者新打开其他浏览器,原来的session都会失效,因为session通过jESESSIONID来区分session,而Jessionid的MaxAge为负数,即浏览器关闭就失效。

    现在问题来了:服务器是如何实现一个session为一个用户浏览器服务的?换个说法:为什么服务器能够为不同的用户浏览器提供不同session?
        
    HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一个用户。于是乎:服务器向用户浏览器发送了一个名为JESSIONID的Cookie,它的值是Session的id值。其实Session依据Cookie来识别是否是同一个用户。
        
    简单来说:Session 之所以可以识别不同的用户,依靠的就是Cookie
        
    该Cookie是服务器自动颁发给浏览器的,不用我们手工创建的。该Cookie的maxAge值默认是-1,也就是说仅当前浏览器使用,不将该Cookie存在硬盘中
    

设置session超时时间的三种方式

方式一:tomcat/conf/web.xml修改

对所有的WEB应用都有效

 <session-config>
                <session-timeout>20</session-timeout>
 </session-config>  

方式二:单个的web.xml文件中设置

对单个web应用有效如果有冲突,以自己的web应用为准。

  <session-config>
                <session-timeout>20</session-timeout>
</session-config>

方式三:通过setMaxInactiveInterval()方法设置


        //设置Session最长超时时间为60秒,这里的单位是秒
        httpSession.setMaxInactiveInterval(60);

        System.out.println(httpSession.getMaxInactiveInterval());

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6fRPCRD-1607248393486)(C:\Users\hello\AppData\Roaming\Typora\typora-user-images\image-20201106222218876.png)]

session应用

1.购物
  • 将已经购买的商品添加到,session中,添加多个session开销大,直接添加一个List为session,因为session不仅可以存字符串也可以存对象。
  • 详细过程见3yhttps://segmentfault.com/a/1190000013130309
禁用cookie,session可使用吗?

我们知道Session 之所以可以识别不同的用户,依靠的就是Cookie(jessionid)

肯定不能正常使用了,但是有解决方法嘛?

有!URL地址重写

HttpServletResponse类提供了两个URL地址重写的方法:

  • encodeURL(String url)
  • encodeRedirectURL(String url)

URL地址重写的原理:将Session的id信息重写到URL地址中。服务器解析重写后URL,获取Session的id。这样一来,即使浏览器禁用掉了Cookie,但Session的id通过服务器端传递,还是可以使用Session来记录用户的状态。

String url="/kan";
        resp.sendRedirect(resp.encodeURL(url));
2.session 防止表单重复提交
  • 前端设置标志位,可以防止表单重复点击提交

  • 刷新和后退再提交,无法通过前端防止,应该通过session

  • (没看太懂)

    html>
    
      <head>
        <meta content="text/html" charset="UTF-8" />
        <title>$Title$</title>
      </head>
      <body>
      <form action="/tt">
        姓名: <input type="text" name="name">
    
        <input type="hidden"  name="token" value="${token}">
        <input value="提交" type="submit">
      </form>
      </body>
    </html>
    
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                TokenProcessor tokenProcessor=TokenProcessor.getInstance();
                String token=tokenProcessor.makeToken();
                req.getSession().setAttribute("token",token);
                //resp.sendRedirect("/index.jsp");
            req.getRequestDispatcher("/index.jsp").forward(req,resp);
        }
    
    import sun.misc.BASE64Encoder;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Random;
    
    public class TokenProcessor {
        private final static TokenProcessor tokenProcessor =new TokenProcessor();
    
        public  static TokenProcessor getInstance(){
            return  tokenProcessor;
        }
        public String makeToken(){
            String token=String.valueOf(System.currentTimeMillis()+new Random().nextInt(9999));
    
            MessageDigest messageDigest= null;
            try {
                messageDigest = MessageDigest.getInstance("md5");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            byte[] md5 = messageDigest.digest(token.getBytes());
            //如果我们直接 return  new String(md5)出去,得到的随机数会乱码。
            //因为随机数是任意的01010101010,在转换成字符串的时候,会查gb2312的码表,gb2312码表不一定支持该二进制数据,得到的就是乱码
            //于是乎经过base64编码成了明文的数据
            BASE64Encoder base64Encoder = new BASE64Encoder();
            return base64Encoder.encode(md5);
        }
    }
    
    
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String serverValue = (String) req.getSession().getAttribute("token");
            String clientValue = req.getParameter("token");
    
            if (serverValue != null && clientValue != null && serverValue.equals(clientValue)) {
    
                System.out.println("处理请求");
    
                //清除Session域对象数据
                req.getSession().removeAttribute("token");
    
            }else {
    
                System.out.println("请不要重复提交数据!");
            }
    
        }
    
3.一次性校验
  • 一次性校验码其实就是为了防止暴力猜测密码
  • 思路:生成验证码后,把验证码的数据存进Session域对象中,判断用户输入验证码是否和Session域对象的数据一致

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8UYdcQu-1607248393492)(C:\Users\hello\AppData\Roaming\Typora\typora-user-images\image-20201106224558060.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iq8UqE6g-1607248393495)(C:\Users\hello\AppData\Roaming\Typora\typora-user-images\image-20201106224736291.png)]

  • 只需要在处理购买页面上创建Cookie,Cookie的值是Session的id返回给浏览器即可
        Cookie cookie = new Cookie("JSESSIONID",session.getId());
        cookie.setMaxAge(30*60);
        cookie.setPath("/ouzicheng/");
        response.addCookie(cookie);
止暴力猜测密码**
- 思路:**生成验证码后,把验证码的数据存进Session域对象中,判断用户输入验证码是否和Session域对象的数据一致**

[外链图片转存中...(img-Z8UYdcQu-1607248393492)]

[外链图片转存中...(img-Iq8UqE6g-1607248393495)]

- 只需要在处理购买页面上创建Cookie,Cookie的值是Session的id返回给浏览器即可

    Cookie cookie = new Cookie("JSESSIONID",session.getId());
    cookie.setMaxAge(30*60);
    cookie.setPath("/ouzicheng/");
    response.addCookie(cookie);
基于Oauth2.0的单点登录—搭建客户端(六) 一. 客户端相关配置 继承WebSecurityConfigurerAdapter,添加@EnableOAuth2Sso注解开启单点登录。 @EnableOAuth2Sso public class SecurityConfig extends WebSecurityConfigurerAdapter { } 只需要将所有需要认证的请求开启认证即可。 @Configuration @EnableOAuth2Sso public class SecurityConfig extends WebSecurit 阅读详情

相关推荐

Springboot应用中设置Cookie的SameSite属性

Cookie除了key和value以外有几个属性。 httpOnly 是否允许js读取cookie secure 是否仅仅在https的链接下,才提交cookie domain cookie提交的域 path cookie提交的path maxAge cookie存活时间 sameSite 同站策略,枚举值:Strict Lax None 其他的都很熟悉了,最后一个是 Chrome 51 开始,浏览器的 Cookie 新增加了一个 SameSite 属性,用来防止 CSRF 攻击和用户追踪。 关于S

csdn_0xFFFF的博客 5813

安全开发:Spring Boot 打开 HttpOnly 和 Secure 属性

应用上线,需要修复安全问题,需要为 Cookie 设置 “HttpOnly” 和 “Secure” 属性。 HttpOnly 设置方法 配置 默认值 说明 server.servlet.session.cookie.http-only true 是否对会话 cookie 使用 "HttpOnly"cookie。 默认 D:\learn\learn-java\spring-boot-high-concurrency>curl http://localhost:8080/stuff

回纹勾边宝相花团 1万+

HyperMesh实战:5种复杂载荷场景下的field映射技巧(附TCL脚本)

本文详细介绍了HyperMesh在5种复杂载荷场景下的field映射技巧,包括轴承载荷的圆柱坐标系映射、粉末压力中的切向力处理、实验数据到有限元模型的场映射、多工况载荷的组合映射以及局部细化网格的边界条件传递。通过实战案例和TCL脚本,帮助工程师高效解决有限元分析中的载荷映射难题,提升工作效率。

fanta的博客 294

Servlet之Cookie、Session学习

Cookie 一、Cookie简介 服务器给客户端的一份数据,数据会存储在客户端上。 二、应用场景 自动登录、浏览记录、购物车等 三、为什么要有Cookie Http的请求是无状态的。客户端和服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本不知道这个客户端是否以前来访过,即每次来访都是陌生人。为了更好的用户体验,更好的交互,所以引进了Cookie,从公司层面...

一名小白的进阶之路 335

Infineon MOSFET开关损耗计算实战指南

本文是英飞凌MOSFET开关损耗计算的实战指南。针对MOSFET发热问题,文章深入剖析了开关损耗的产生机理,并基于Infineon数据手册的关键参数,手把手推导了开通与关断损耗的工程计算公式。同时,指南强调了栅极电阻、寄生参数等实际因素对损耗的影响,并提供了从理论计算到实测优化的完整路径,帮助工程师精准评估与优化电源设计。

weixin_29212867的博客 443

别再只调OpenCV参数了!手把手教你用Python bm3d库搞定图像去噪(附完整代码与效果对比)

本文详细介绍了BM3D算法在图像去噪中的高级应用,通过Python bm3d库实现超越OpenCV传统方法的去噪效果。文章包含完整代码示例、参数调优技巧及工程化应用场景,帮助开发者掌握这一被称为'传统方法天花板'的技术,显著提升图像信噪比和细节保留能力。

weixin_28362173的博客 366

JAVA_day18 Servlet_day3 Session&Cookie

1.session session对象用来存储有关用户会话的所有信息,这些信息保存在服务器端。 常用方法: 1.setAttribute(String key,Object value) 以key/value的形式保存对象值,void类型 2.getAttribute(String key) 通过 key 获取对象值,Object类型 3.getId() 获取 session 对象的编号,Str...

weixin_45388014的博客 230

ICC2 高效上手 | create_lib 命令全攻略:数字后端工程师的必备秘籍

如果技术文件中的足够满足你的需求,你可以设置,然后运行create_lib命令;如果技术文件的精度不够,那就需要显式地使用来定义缩放因子。在使用create_lib必须显式指定库名(如my_libA推荐优先通过或来关联技术数据,确保你的设计库有正确的工艺基础。显式地通过-ref_libs定义参考库,这样可以避免工具自动推导时可能出现的冲突。慎重使用,只有在对数据精度有特殊需求时才显式指定,并且要确保它与参考库的缩放因子一致。

weixin_50820814的博客 1595

最新Servlet视频教程之Session&Cookie

动力节点推出的Java视频教程首先简单介绍了Cookie,及在火狐浏览器下如何查看Cookie,然后详细讲解了在JavaEE中如何使用Cookie,及Cookie的禁用。还讲解了Session对象的创建及Session域;其次详细讲解了Session的工作原理;然后讲解了Session的失效;后讲解了Cookie禁用后如何使用Session进行会话跟踪。...

f5465245的博客 410

从零开始学习CANoe(六)—— CAPL 测试节点

创建CAPL Test Module的两种方式

蚂蚁小兵 1万+

uniapp微信小程序 - 解决苹果ios底部输入框被软键盘遮挡的问题,input/textarea底部输入框被弹出的软键盘挡住部分或全部遮住(解决uniApp小程序底部输入框,键盘弹起时页面整体上移

uniapp: IOS微信小程序输入框部分被软键盘遮挡问题,iOS微信小程序键盘弹出时输入框被挡住,uniapp小程序苹果IOS系统软键盘唤起导致底部输入框被遮挡的问题,ios 键盘弹出input输入框被遮挡,uniapp textarea输入框软键盘遮挡问题,苹果手机ios系统,解决uni-app微信小程序底部输入框,键盘弹起时页面整体上移 问题,关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案,uniapp使用输入框固定在底部键盘弹起把输入框挡住问题,安卓上没问题就苹果不行,仅ios

🏆 前端领域优质创作者 5597

暑期进度-5

学习进度总结: 1.实现增删改查 2.学习了servlet、response、request. 下周计划: 学习session&cookie、jsp、el&jstl 转载于:https://www.cnblogs.com/liujinxin123/p/11402465.html...

weixin_30847271的博客 150

大厂面经:京东大数据面试题及参考答案(3万字长文)

Kafka是一个开源的分布式流处理平台,由 LinkedIn 开发并在 2011 年贡献给 Apache 软件基金会。高吞吐量:能够处理大量的数据流,适合实时数据管道。持久性:数据存储在磁盘上,确保数据不丢失。容错性:通过数据复制提供高可用性。扩展性:支持水平扩展,易于增加更多节点。Kafka 的核心概念Topic:逻辑上的数据流,可以理解为主题。Producer:生产数据的应用程序。Consumer:消费数据的应用程序。Broker:Kafka 集群中的服务器节点。Partition。

大模型大数据攻城狮的专栏 863

Session&Cookie

Session Cookie 一、Servlet细节 (一)配置多个路径 1.第一种方法:在一个servlet-mapping中配置多个url-pattern <servlet-mapping> <servlet-name>details</servlet-name> <url-pattern>/deta</url-patter...

EstherLty的博客 159

电磁兼容(EMC)整改案例(七):EFT测试失败都是IC悬空引脚惹的祸

无论任何时候,为了避免这些问题,通常建议对悬空的IO口进行适当的配置,比如设置为强推挽输出低电平、输入带上拉或下拉电阻等,以减少外部电路对IO管脚状态的影响,并提高系统的稳定性和可靠性.

linkking27的博客 1032

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA EE-SESSION&COOKIE

JAVA EE-SESSION&COOKIE 应该相信,自己是生活的战胜者。 —— 雨果 什么是会话技术? 会话的概念: 日常生活来讲.会话就是两个人聊天. 聊天的前提,聊天双方需要有记忆力. 在聊的过程中,都是基于之前聊的状态,继续往下聊. 我们javaweb中,浏览器和服务器也可以看作是双方在聊天(请求,响应). 浏览器服务器双方也需要有”记忆力”,保存之前的聊天状态.服务器和浏览器才可

Thingvellir的博客 1532

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

4D毫米波雷达CANFD点云解析与Matplotlib三维可视化实战

在自动驾驶感知与路测数据采集场景中,CANFD总线作为车载高速通信的核心载体,凭借最高64字节数据段和5Mbps的传输速率,为4D毫米波雷达的大规模点云输出提供了高效通道。理解CANFD报文结构、字节序与缩放因子,是从原始数据还原目标距离、角度、速度等物理量的前提。通过球坐标到笛卡尔坐标的变换,可将雷达量测映射为三维空间点云,进而利用Matplotlib实现动态可视化,辅助算法验证与调试。这种方法不依赖厂商封闭工具链,适用于驱动开发、多传感器时间对齐和雷达标定等工程实践。本文基于实际项目经验,系统梳理了从C

weixin_34337381的博客 339

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Day18-session&cookie

会话技术

jjizh的博客 7073

session&cookie

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1 Cookie机制 在程序中,会话跟...

余念 2805

一文了解java Session&Cookie Filter&Listener

Session&Cookie、Filter&Listener 1. Session&Cookie 1.1什么是会话跟踪技术 会话跟踪是Web程序中常⽤的技术,⽤来跟踪⽤户的整个会话。保持对⽤户会话期间的数据管理。常⽤ 的会话跟踪技术是Cookie与Session。 Cookie通过在客户端记录信息确定⽤户身份 Session通过在服务器端记录信息确定⽤户身份。 1.2 Cookie Cookie是客户端(⼀般指浏览器)请求服务器后,服务器发给客户端的⼀个辨认标识,保存在客户端,当客户

weixin_43763377的博客 479

.session&cookie的理论详细解释

前言: 我们常用的Web程序都是使用HTTP协议传输数据的,HTTP协议是无状态的协议.u偶氮数据交换完毕,客户端与服务端的链接就会关闭,再次交换数据需要建立心得连接.这就意味着服务器无法从连接上跟踪会话.   早期为了记录用户的状态时,就在浏览器记录用户信息cookie机制,每次请求都会往服务器发送这些数据,这样服务器就知道谁在请求了,时间长,安全性就是暴露了, 在本地就会有人想着去修改c...

Zhan_LV的博客 259

JavaWeb的学习--会话技术Session&Cookie

一、会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪 里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。会话技术是帮助服务器 记住客户端状态(区分客户端) 举例购物过程: 2.会话技术 从打开一个浏览器访问...

diaogu9242的博客 146

9.25 [JavaWeb] 会话技术(Session&Cookie).简单分页查询

文章目录SessionSession生命周期CookieCookie的生命周期Cookie路径设置cookie和session的区别简单分页查询分页的五大参数 : Session session,在服务器端保存用户多次请求的数据。(注意:session技术,还是依赖cookie技术) 1 、session是服务器开辟的一个用来存储数据的空间 2 、 服务器为每个浏览器单独开辟一个session ...

SHOUHANG88的博客 342
上一篇: java之多线程
下一篇: tomcat与servlet
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值