不同 servlet 如何共享 session

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不同 servlet 如何共享 session相关的知识,希望对你有一定的参考价值。

我现在有一个登陆页面 把登陆动作交给一个servlet处理 在登陆servlet中我设置了一个session 登陆成功后将用户名存入session中然后重新定向到首页jsp页面 在首页我成功的取出了session中的用户名 ,现在我有其他业务 比如说是购物业务 同样交给一个servlet处理 在这个购物servlet中我用session.getAttribute("username");想取出用户名 但是它显示错误说session cannot be resolved 如何共享session呢? 或者如何在购物的servlet中怎么取出已经登陆的那个用户名?

参考技术A session在一个会话中都是有效的,而在同一个会话中你可以访问多个servlet,也就是说在不同的servlet中session是相同的,是可以共享的。
共享办法:在servlet中先得到session,即
HttpSession
session
=
request.getSession();再使用session,在jsp也页面中实现是可以的,因为jsp中内置了session对象,所以不用自己定义,但是在serlvet中得自己获取。
Session:用户访问某个网站时,web服务器就会在服务器的内存中为该浏览器分配一个空间,这个空间是被浏览器独占的。该空间就称其为
Session空间
,用户通过浏览器访问服务器,再到浏览器退出访问这段时间叫做
session会话
,这个会话时间通常为30min(可以手动修改)。

Servlet - Session相关

/*

1. 作用: 解决了一个用户的不同请求的数据共享问题

2. 原理:
    用户第一次访问服务器, 服务器会创建一个Session对象给此用户, 
    并将该Session对象的JSESSIONID使用Cookie技术存储到浏览器中, 
    保证用户的其他请求能够获取到同一个Session对象, 
    也就保证了同一个用户的不同请求能够获取到共享数据

3. 特点: 
    存储在服务器端, 由服务器进行创建, 依赖Cookie技术
    
4. 使用: 
    // 创建和获取Session对象
    HttpSession session = req.getSession();
        
        如果请求中拥有Session的标识符, 也就是JSESSIONID, 则返回对应的Session对象
        如果请求中没有Session的标识符, 则创建新的Session对象, 
        并将其JSESSIONID封装成Cookie对象存储到浏览器的内存中, 
        如果Session对象失效了, 也会重新创建一个Session对象
        注意: JSESSIONID存储在了Cookie的临时存储空间中, 浏览器关闭即失效
        
    // 设置Session的存储时间, int值为多少秒
    session.setMaxInactiveInterval(int); 

        Session的默认存储时间位30分钟 
        在指定的时间内, Session对象没有被使用, 则销毁, 如果使用了, 则重新计时
    
    // 强制Session对象失效
    session.invalidate();

    // 存储数据
    session.setAttribute("key", "value");
    
    // 获取数据
    session.getAttribute("key");
    
        存储的动作和取出的动作可以发生在不同的请求中, 但存储要先于取出执行

5. Session失效处理
    
    将用户请求中的JSESSIONID和后台获取到的Session对象的JSESSIONID进行比对, 
    如果一致, 则Session没有失效, 如果不一致, 则说明了Session对象失效了, 
    这时可以重定向到登录页面, 让用户重新登录

*/

 

以上是关于不同 servlet 如何共享 session的主要内容,如果未能解决你的问题,请参考以下文章

Servlet - Session相关

SpringBoot整合NoSql--Session共享

spring-session实现分布式集群session的共享

spring-session实现分布式集群session的共享(转)

如何过滤不同的 url 以便与相同的 servlet 一起工作?

同一用户的不同页面共享数据的方法