用户登录成功后重新获取Session

漏洞修复:Session会话登录前后无变化问题

这个漏洞意思是说用户登录系统前后Session变化,就是JSESSIONID没有改变


所以要在用户登录成功后在Filter(拦截器)或者登录Action里加入以下代码:

HttpServletRequest request = ServletActionContext.getRequest();
//获取旧Session
HttpSession session = request.getSession(false);
System.out.println("------------>旧session:" + session.getId());
//清空session
session.invalidate();
//重新获取session
session = request.getSession(true);
System.out.println("------------>新session:" + session.getId());
//将登录的用户保存到新Session
session.setAttribute(SysProperties.LOGIN_OBJECT, loginObject);

打印结果:

------------>旧session:45E48C020751A402A5AE5B7FDEC41B5A
------------>新session:EDE76FBC7D9DBF7CABC0ED025B350131
这里要说的重点是request.getSession()参数True和False的区别:
request.getSession(true):若存在会话则返回该会话,否则新建一个会话。

request.getSession(false):若存在会话则返回该会话,否则返回NULL。

这里还有一个题外话,就是如果清除Cookie:

//获取cookie
Cookie cookie = request.getCookies()[0];
//让cookie过期
cookie.setMaxAge(0);
不过清除Cookie后要及时新建Session,否则会报错。



### 回答1: 中,可以通过在服务器端设置Session来实现。在用户登录成功后,服务器会生成一个Session ID,作为该用户的唯一标识,并将该ID存储在Session中。接下来,每次用户请求服务器时,服务器都会检查用户请求中是否包含Session ID,如果有,则从Session获取该用户的信息进行处理。在用户退出登录或Session过期时,服务器会删除对应的Session信息。在Java中,可以使用HttpSession类来实现Session管理。 ### 回答2: Session是一种在服务器端存储用户信息的机制。在用户成功登录后,服务器会在内存中创建一个唯一的Session对象,并为该用户分配一个唯一的Session ID。用户的登录信息会被存储在该Session对象中。 Session通过使用Cookie来维护与用户的关联,当用户登录成功后,服务器会将Session ID以Cookie的形式发送到客户端的浏览器中。浏览器在下次请求服务器时,会自动将该Cookie带上,从而服务器可以根据Session ID来找到对应的Session对象,从而获取用户的登录信息。 存储在Session中的用户信息可以包括用户的身份标识、用户名、权限等。这些信息在用户每次发送请求时都可以被服务器获取和使用,从而实现对用户的身份认证和权限控制。比如,在用户访问某个需要登录权限的页面时,服务器可以通过Session中的用户信息判断用户是否具有访问权限。 Session的数据存储在服务器端,相对于客户端的Cookie来说,更加安全。因为用户无法直接修改Session中的数据,只能通过与服务器的交互来操作。 需要注意的是,Session在用户退出登录后会被销毁,或者在一定时间内没有活动时会被服务器自动清理。因此,Session具有一定的时效性和安全性,可以有效地保护用户的登录信息。 ### 回答3: Session 是一种在服务器端存储用户信息的机制。当用户在网站登录成功后,服务器会为该用户创建一个对应的 Session 对象,并在该对象中存储用户的相关信息。这些信息可以包括用户的用户名、角色、权限等。 Session 的存储方式可以是内存、数据库或者文件,具体使用哪种方式取决于服务器的配置。当用户进行其他操作时,如访问其他页面或提交表单,服务器会通过 session ID 来识别该用户,并从 Session 存储的位置中获取相应的用户信息。 由于 Session 是存储在服务器端的,相比于存储在客户端的 Cookie,它更加安全,因为用户无法直接修改其中的信息。而且,由于存储在服务器端的 Session 是通过 session ID 来识别用户的,因此浏览器即使被关闭,用户下次重新访问网站时仍然可以保持登录状态,不需要重新进行登录操作。 然而,使用 Session 也存在一些问题。首先,如果网站访问量很大,Session 对服务器的内存消耗是比较大的,因为每个登录的用户对应都有一个 Session 对象。此外,如果用户在某些情况下没有主动退出,并且 Session 超时时间较长,那么在这段时间内,即使用户已经离线,服务器仍然需要维护用户的 Session 对象,增加了服务器的负担。 为了解决这些问题,可以采用一些方法,如定期清理过期的 Session、将 Session 存储到数据库中、使用集群部署等措施,来提高系统的性能和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值