精华内容
下载资源
问答
  • session序列化
    2018-08-04 15:21:26

    在tomcat文件夹下打开conf,打开context.xml
    将其中
    <!--
    <Manager pathname="" />
    -->

    的注释取消就行了

    更多相关内容
  • tomcat kryo序列化,msm-memcached-session-manager-tc7-1.8.2
  • memcache-session序列化

    2018-06-21 17:39:25
    tomcat kryo memcache session序列化 msm-memcached-session-manager-1.8.2
  • * 将Session序列化成String类型 * @param session * @return */ private String serializ(HttpSession session) { try { //ByteArrayOutputStream 用于存储序列化的Session对象 ...
  • session序列化的问题

    2019-04-11 15:15:01
    tomcat会把session存到硬盘上,序列化后保存到一个session文件中,当再次启动服务器会反序列化,此时 session的反序列化会异常 解决办法: 在存入session时实现序列化的接口,这样序列化与反序列化就不会出错了 ...

    在这里插入图片描述
      tomcat是已经成功启动的,并且项目也是成功部署的,但是日志信息中有两条警告信息:无法反序列化 会话即session。

      当tomcat非正常关闭时,tomcat会把session存到硬盘上,序列化后保存到一个session文件中,当再次启动服务器会反序列化,此时 session的反序列化会异常

    解决办法:

      在存入session时实现序列化的接口,这样序列化与反序列化就不会出错了在这里插入图片描述

    session何时会销毁

    1. session超时
    2. 服务器非正常关闭
    3. 手动调用session的销毁方法 invalidate()

      在利用上述方法中关闭时,属于正常的方式关闭。当session没有销毁时,会在.apache-tomcat-7.0.64\work\Catalina\localhost\shop产生了一个ser的session序列化文件。在再次启动服务器的时候会把序列化文件反序列化,当反序列化不失败时就会给出警告。

    展开全文
  • Redis应用:session分离 【session序列化失败 JSONException异常】 文章目录Redis应用:session分离 【session序列化失败 JSONException异常】session分离思路代码示例spring-session-data-redis1. pom引入依赖2. ...

    Redis应用:session分离 【session序列化失败 JSONException异常】

    session分离思路

    当用户在后台首次获取session后,将会在本次会话结束前的每次请求与响应中附带对应的SessionId,唯一对应后台的session域信息(这里分配sessionid并存入cookie是由tomcat自动完成)
    所以,简答的思路就是

    1. 在首次获取session后,将sessionid作为键将对应session域信息序列化后保存到redis数据库内
    2. 需要获取session域信息时,拿着request携带的cookie中的sessionId值向redis数据库查找对应的数据,并反序列化为Session对象

    代码示例

        /**
         * 保存session
         *
         * @param req 请求信心
         * @return 结果
         */
        @GetMapping("/saveSession")
        public AjaxResult saveSession(HttpServletRequest req){
            System.out.println(new Date()+":::"+req.getSession().getId());
            HttpSession session = req.getSession();
            session.setAttribute("num",num++);
            String sessionString = JSON.toJSONString(session);
            redisFullUtil.set(session.getId(),sessionString);
            return AjaxResult.success(session.getId()+"::"+session.getAttribute("num"));
        }
    
    
        /**
         * 获取保存的session
         *
         * @param req 请求信息
         * @return 结果
         */
        @GetMapping("/getSession")
        public AjaxResult getSession(HttpServletRequest req){
            System.out.println(new Date()+":::"+req.getSession().getId());
            String sessionString = redisFullUtil.get(req.getSession().getId());
            HttpSession session = JSON.parseObject(sessionString, HttpSession.class);
            return AjaxResult.success(session.getAttribute("num"));
        }
    

    理想很美好,现实很骨感,程序运行后直接报错
    在这里插入图片描述
    查询redis数据库,可以看见,session信息确实已经存入redis数据库,问题就出在sessionString的反序列化上
    在这里插入图片描述

    com.alibaba.fastjson.JSONException: illegal setter

    通过报错信息可以大致推断是HttpSession的某个属性缺少对应的set方法,仔细查看HttpSession的实现类后发现和猜测接近,网上也没有找到方法解决此问题,卒

    spring-session-data-redis

    转变思路一番搜索,现有技术是如何实现session分离,发现spring-session-data-redis就是专门做这件事的,还帮我们完成了大部分的工作,只需要做一些简答的配置工作即可完成session的分离

    1. pom引入依赖

    <!-- spring boot 与 redis 应用的基本配置 -->
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
    <!-- spring session 与redis 应用环境基本配置, 需要开启redis后才可以使用, 不然启动会报错 -->
    <dependency>
       <groupId>org.springframework.session</groupId>
       <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    

    2. 配置: application.yml

    spring:
      redis:
        database: 0
        host: 你的redisip
        port: 6379
        password: 你的redis密码
        pool:
          max-idle: 8
          min-idle: 0
          max-active: 8
          max-wait: 1
        timeout: 5000
      session:
        store-type: redis
        
        
    redis:
       hostname: 你的redisip
       port: 6379
       pawssword: 你的redis密码
    

    3. 增加配置类

    SessionConfig.Class

    package org.huber.sharesession.config;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
    import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
    import org.springframework.session.web.http.DefaultCookieSerializer;
    
    import javax.validation.Valid;
    
    /**
     * @Classname SessionConfig
     * @Description TODO
     * @Date 2020/1/17 12:43
     * @Author by Ren Jie
     */
    @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
    public class SessionConfig {
    
        @Value("{$redis.hostname}")
        private String hostName;
    
        @Value("${redis.port}")
        private int port;
    
    
        @Bean
        public RedisStandaloneConfiguration connectionFactory() {
            RedisStandaloneConfiguration jedisConnectionFactory = new RedisStandaloneConfiguration();
            jedisConnectionFactory.setHostName(hostName);
            jedisConnectionFactory.setPort(port);
            return jedisConnectionFactory;
        }
    
        @Bean
        public DefaultCookieSerializer defaultCookieSerializer(){
            DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
            defaultCookieSerializer.setCookiePath("/");
            return defaultCookieSerializer;
        }
    }
    

    SessionInitializer.Class

    package org.huber.sharesession.config;
    
    import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;
    
    /**
     * @Classname SessionInitializer
     * @Description TODO
     * @Date 2020/1/17 12:47
     * @Author by Ren Jie
     */
    public class SessionInitializer extends AbstractHttpSessionApplicationInitializer {
    
        public SessionInitializer(){
            super(SessionConfig.class);
        }
    }
    

    结果测试

    1. 开启会话,获取sessionid
    2. 重启服务器
    3. 再次访问后台,获取sessionid
      如果是同一个sessionid,则说明session分离成功
    package org.huber.sharesession.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * @Classname SessionController
     * @Description TODO
     * @Date 2020/1/17 12:49
     * @Author by Ren Jie
     */
    @RestController
    @RequestMapping("/shareSession/session")
    public class SessionController {
    
        @GetMapping("/setSession")
        public String setSession(HttpServletRequest req){
            String sessionId = req.getSession().getId();
            System.out.println("sessionId = " + sessionId);
            return sessionId;
        }
    }
    

    演示如下:
    在这里插入图片描述
    可以看见,不关闭浏览器,即使服务器重启,也还是同一次会话(sessionid相同)

    至此session分离成功

    展开全文
  • 主要介绍了PHP中SESSION序列化机制的相关资料,文中介绍的非常相信,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
  • Session序列化

    2019-07-03 11:39:43
    目录:Session序列化文件(.ser) 当用户第一次访问某个网站时会自动创建HttpSession,添加到HttpSession中的对象最好是实现Serializable接口,这样Servlet容器在必要的时候可以将其序列化到文件中,否则序列化时会...

    如果对象被保存在了session中,toncat在重启或关闭是会吧Session对象序列化到硬盘,这个对象必须实现Serializable接口。

    目录:Session序列化文件(.ser)

    当用户第一次访问某个网站时会自动创建HttpSession,添加到HttpSession中的对象最好是实现Serializable接口,这样Servlet容器在必要的时候可以将其序列化到文件中,否则序列化时会出异常。

    在这里插入图片描述
    目录:jsp转的servlet及tomcat的jvm编译后的class

    只需编译一次,下次用户再访问直接调用class文件响应用户(jsp被修改还是会再次编译)。
    在这里插入图片描述

    展开全文
  • shiro session序列化失败问题

    千次阅读 2019-03-13 17:17:33
    场景 今天一时兴起想要做个...shiro SessionDao 的session 实现了ValidatingSession接口,当序列化时转变成字符串会导致多出来 “valid”:true 解决方法 存储session字段修改为byte[] 反序列化的代码修改为 Si...
  • 一、session序列化和反序列化 序列化 一般来说,服务器启动后,就不会再关闭了,但是如果逼不得已需要重启,而用户会话还在进行相应的操作,这时就需要使用序列化session信息保存起来放在硬盘,服务器重启后,又...
  • 一个有意思的反序列化
  • 首先打开题目页面直接获得源码: <?...//A webshell is wait for you ...#ini_set设置指定配置选项的值。这个选项会在脚本运行时保持新的值,并在... 设置选择session序列化选择器 session_start(); class OowoO { p...
  • Session序列化和反序列化

    千次阅读 2017-10-21 12:35:00
    JavaWeb之Session序列化和反序列化 && Session的活化和钝化 4506 应用场景: 1.一般来说,服务器启动后,就不会再关闭了,但是如果逼不得已需要重启,而用户会话还在进行相应的操作,...
  • php session序列化

    千次阅读 2022-03-22 01:45:47
    php_session序列化 php 存储session的三种模式 php_serialize 经过serialize()函数序列化数组 php 键名+|+经过serialize()序列化处理后的值 php_binary 键名长度对应ASCII字符+键名+serialize()序列...
  • spring-session自定义序列化

    千次阅读 2018-05-05 13:22:29
    spring-session默认采用jdk序列化方法,该方法效率低下、内存占用大,且需要额外修改代码。故需要自定义序列化方法自定义序列方法使用jackson库首先需要一个类作为序列化的工具,需要实现RedisSerializer该接口在反...
  • session序列化错误

    千次阅读 2016-07-18 17:56:39
    在利用上述方法中关闭时,属于正常的方式关闭,所以,session没有销毁,在.apache-tomcat-7.0.64\work\Catalina\localhost\shop产生了一个ser的session序列化文件。在再次启动服务器的时候会把序列化文件反序列化,...
  • Tomcat-Session序列化学习 简介 CVE-2020-9484。 要求: tomcat必须启用session持久化功能FileStore tomcat/lib或者WEB-INF/lib目录下的依赖存在可用的gadget 在服务器上存在已知路径文件内容可控 漏洞分析 漏洞...
  • 在首次获取session后,将sessionid作为键将对应session域信息序列化后保存到redis数据库内 需要获取session域信息时,拿着request携带的cookie中的sessionId值向redis数据库查找对应的数据,并反序列化为Session...
  • shiro 通过redis实现session共享 共享Session目的 在分布式服务的工程中,一个服务器断了,负载均衡服务器会把请求分配给其他的服务器,如果设置了session共享,就不需要用户再次登录了. shiro实现session共享的原理 ...
  • session序列化异常、session的销毁方式

    千次阅读 2016-07-02 19:23:14
    有异常可能是session序列化异常: Session销毁:1、session超时、30分钟默认 2、非正常关闭服务器(点下面这里就) 3、关闭浏览器,手动启动Session.close();   Session销毁:1、session超时、30分钟默认 4、...
  • shiro整合redis,反序列化必须使用jdk序列化的方式,否则,无法序列化。或者自定义序列化为字节数组。 自定义序列化: /** * @author: wangsaichao * @date: 2018/6/20 * @description: redis的value序列化工具 ...
  • WebSocket的session是不能够被序列化的,java.io.NotSerializableException 两种解决方案: 使用spring session自定义session. 既然无法序列化session,那还是存储在Map中,各服务器通过发布订阅变相实现共享...
  • session序列化

    千次阅读 2022-03-24 23:41:28
    session序列化的漏洞是由三种不同的反序列化引擎所产生的的漏洞 其中 session.serialize_handler string--定义用来序列化/反序列化的处理器名字。默认使用php 若使用如下设置: <?php //ini_set('session....
  • 要了解这个漏洞必须知道Session序列化机制。 PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患 配置文件php.ini中含有这几个与session存储配置相关的配置项: session.save_path="" --设置session的...
  • 但是这样就会有一个问题,Spring boot在封装Request对象时会将当前SESSION中所有属性对象反序列化,反序列化都成功以后,将SESSION对象生成。如果有一个微服务将本地的自定义Bean对象放置到SES...
  • 1、先来说一下 shiro session 序列化到 redis 中的过程 shiro session 放入到 redis 中的 过程(序列化过程):1、将 shiro 的 SimpleSession 通过 RedisTemple 模板,有两种方案,即 Jackson 和 fastJson ,都...
  • Spring Session + Redis——自定义JSON序列化解决方案 问题分析 RedisHttpSessionConfiguration中,Bean名称必须是springSessionDefaultRedisSerializer才能指定Jackson序列化器。 @Autowired(required = false...
  • 出现异常: nested exception is org.springframework.core....错误提示找不到entity对象,认为没有序列化。 实际上是由于修改了entity对象而redis中还存有原来的key,因此只需要在redis中清空一下即可 ...
  • 版本: ...org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springfr
  • session的序列化和反序列化 /** * * 机能概要:将Session序列化成String类型 * * @param session * @return */ public static byte[] serializ(Session session) { try { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,233
精华内容 53,293
关键字:

session序列化