本人小白,尝试写了一个SSM前后端分离工程,在后端写登录时放入了session并用println打印检查发现放入了,但是在下一个接口中调用session中的值时一直为空,再次打印发现session中的对应值已经为空了,这是怎么回事,附两个接口代码:
登录写入session正确
@RequestMapping("/login")
    @ResponseBody    public CommonReturnType selectUser(String telephone, String password, String state) {
        User user = userService.selectByTelephone(telephone);
        IsEmptyUtil isEmptyUtil =new IsEmptyUtil();
        Map<String,Object> returnMsg = new HashMap<String, Object>();
        if(isEmptyUtil.isEmpty(user)){
            returnMsg.put("loginTips","没有该用户");
            return CommonReturnType.create(returnMsg);
        }else if(!(password).equals(user.getPassword())){
            returnMsg.put("loginTips","密码错误");
            return CommonReturnType.create(returnMsg);
        }else if(!(state).equals(user.getState())){
            returnMsg.put("loginTips","身份错误");
            return CommonReturnType.create(returnMsg);
        }
        else {
            this.httpServletRequest.getSession().setAttribute("BHS_LOGIN_USER",user);
            returnMsg.put("user",user);
            returnMsg.put("loginTips","登录成功");
            System.out.println(this.httpServletRequest.getSession().getAttribute("BHS_LOGIN_USER"));
            return CommonReturnType.create(returnMsg);
        }
    }再次使用session变为了空
@RequestMapping("/studentSubject")
    @ResponseBody    public CommonReturnType studentSubject(){
        System.out.println(this.httpServletRequest.getSession().getAttribute("BHS_LOGIN_USER"));
        User user =(User) this.httpServletRequest.getSession().getAttribute("BHS_LOGIN_USER");
        if (user==null){
            throw new BusinessException(EmBusinessError.PLEASE_LOGIN);
        }
        else {
            int userId = user.getId();
            Map<String, Object> map = Maps.newHashMap();
            map.put("data", subjectService.selectById(userId));
            return CommonReturnType.create(map);
        }
    }

解决方案 »

  1.   

    获取一下sessionID和hashCode吧,你这个前后端分离我觉得问题出在前端,前端每次请求的sessionId变了,相当于两个浏览器第一个放入值,第2个取值,不是一个session当然取不到了,记得结贴。
      

  2.   

    你好这个问题发现了确实出在前端请问如何解决sessionId的问题?谢谢了
      

  3.   

    你好这个问题发现了确实出在前端请问如何解决sessionId的问题?谢谢了我都不知道你怎么写的。你前端用的什么技术,你就百度什么技术呗,看看是不是有什么对象,你是每次都用重新new的,前端本身是可以设置sessionID的,你可以在请求里设置固定的sessionID
      

  4.   

    你好这个问题发现了确实出在前端请问如何解决sessionId的问题?谢谢了我都不知道你怎么写的。你前端用的什么技术,你就百度什么技术呗,看看是不是有什么对象,你是每次都用重新new的,前端本身是可以设置sessionID的,你可以在请求里设置固定的sessionID
    前端用的reaact,请求代码我贴一下,您受累看看
    componentDidMount(){
            this.requestList();
        }
        requestList = ()=> {
            let _this = this;
            axios.ajax({
                url:'http://localhost:8080/user/studentSubject',
                data:{
                    params:{}
                }
            }).then((res)=>{
                if(res.status == 'success'){
                    let list  = res.data.data.map((item,i)=>{
                        item.key = i;
                        return item;
                    })
                    this.setState({
                        list:list,
                        pagination:Utils.pagination(res,(current)=>{
                            _this.params.pageNo = current;// 当前页数
                            _this.requestList(); //刷新列表数据
                         })
                    })
                }
                else {
                    console.log(res.data.errMsg);
                }
            })
        }
      

  5.   

    你好这个问题发现了确实出在前端请问如何解决sessionId的问题?谢谢了我都不知道你怎么写的。你前端用的什么技术,你就百度什么技术呗,看看是不是有什么对象,你是每次都用重新new的,前端本身是可以设置sessionID的,你可以在请求里设置固定的sessionID
    前端用的reaact,请求代码我贴一下,您受累看看
    componentDidMount(){
            this.requestList();
        }
        requestList = ()=> {
            let _this = this;
            axios.ajax({
                url:'http://localhost:8080/user/studentSubject',
                data:{
                    params:{}
                }
            }).then((res)=>{
                if(res.status == 'success'){
                    let list  = res.data.data.map((item,i)=>{
                        item.key = i;
                        return item;
                    })
                    this.setState({
                        list:list,
                        pagination:Utils.pagination(res,(current)=>{
                            _this.params.pageNo = current;// 当前页数
                            _this.requestList(); //刷新列表数据
                         })
                    })
                }
                else {
                    console.log(res.data.errMsg);
                }
            })
        }params把sessionID设了
      

  6.   

    你好这个问题发现了确实出在前端请问如何解决sessionId的问题?谢谢了我都不知道你怎么写的。你前端用的什么技术,你就百度什么技术呗,看看是不是有什么对象,你是每次都用重新new的,前端本身是可以设置sessionID的,你可以在请求里设置固定的sessionID
    前端用的reaact,请求代码我贴一下,您受累看看
    componentDidMount(){
            this.requestList();
        }
        requestList = ()=> {
            let _this = this;
            axios.ajax({
                url:'http://localhost:8080/user/studentSubject',
                data:{
                    params:{}
                }
            }).then((res)=>{
                if(res.status == 'success'){
                    let list  = res.data.data.map((item,i)=>{
                        item.key = i;
                        return item;
                    })
                    this.setState({
                        list:list,
                        pagination:Utils.pagination(res,(current)=>{
                            _this.params.pageNo = current;// 当前页数
                            _this.requestList(); //刷新列表数据
                         })
                    })
                }
                else {
                    console.log(res.data.errMsg);
                }
            })
        }params把sessionID设了
    能具体说说解决方法吗?