java web session管理_JavaWeb---会话管理---Session

本文介绍了Java Web中的Session会话管理,包括Session的概念、生命周期、如何创建和获取Session,以及Session在不同浏览器间的应用。讲解了HttpSession接口的方法,如setAttribute和getAttribute,并讨论了安全退出和无Cookie情况下的会话跟踪。
摘要由CSDN通过智能技术生成

Session会话简介

会话是指在一段时间内,用户使用同一个浏览器进程与Web应用之间的交互过程。

会话(Session)通常用来跟踪用户的状态,缓存用户在此浏览器进程中的信息。

当用户关闭浏览器,上一个Session也就无法再次获得了(Cookie的maxAge为-1的情况)。再次打开新的浏览器,将开始一个新的会话。

类javax.servlet.http.HttpSession。每一个HttpSession代表用户的一个会话。

每一个Session的过期时间默认为30分钟。

当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户。

下图是一个响应头(下图是基于Servlet3.0的,在Servlet2.5中没有HttpOnly属性)

服务器给每个用户创建一个会话,即HttpSession对象,保存在服务器端。

那么,当用户再次访问服务器时,服务器是如何知道还是当前用户呢?

当浏览器再次访问服务器时,会携带包含了jsessionid的cookie访问服务器。服务器根据此id返回此用户的HttpSession对象,就保持了会话。

(那么,是否可以在不同的浏览器上实现同一个同一个会话呢?

下面是一个典型的URL,它带有一定的欺骗作用,可以在不同的浏览器上实现同一个会话:

https://localhost:8080/day07_2/CNCookieServlet;jsessionid=F8692D61CD46D094DBB7A8FC7387649C)

浏览器和服务器的关系如下两图:

8a88b6cc58c8365537fb8c4a2e9ce227.png

e0d3fd56ca458f8e0cef3f3a43a94179.png

HttpSession:

在Servlet中,通过HttpServletRequest.getSession方法获取会话对像。

HttpSession接口的以下方法用于向会话范围内共享数据:

getAttribute(“name”)

setAttribute(“name”,object);

getAttributeNames()

removeAttrubute(“name”)

Invalidate(); - 此方法强力删除服务器缓存的session.

示例:

在一个Servlet的向httpSession中setAttribute设置某些值。

通过超连接,或其他方式转到其他servlet并通过getAttribute显示信息。

在任意Servlet中调用getAttribute显示信息。

关闭此浏览器,重新访问获取信息的servlet,你会发现已经没有信息了。

如下:String name=request.getParameter("name");

request.setAttribute("name", "request---"+name);

request.getSession().setAttribute("name", "session---"+name);

getServletContext().setAttribute("name", "application---"+name);

Session的唯一标识Id:

每一个Session都一个唯一标识,即ID。

当浏览器获取一个新的Session时,用户即可以通过session.geId();打印出ID的值 。

在不关闭浏览器的情况下,在多个页面上跳转,使用的是同一个Session。

如:request.getSession().getId()

何为安全退出:

用户退出时,应该当将自己的信息从Session中清除-即安全退出。

安全退出是为了将自己在服务器上留下的信息清除干净,以防被黑

Session.invalidate();1、request.getSession().invalidate();

如此可将session池中的相对应的对象删除

2、Session.removeAttribute(…)

如:request.getSession().removeAttribute("realCode");

用于删除session对象中的属性

通过重写URL来跟踪会话:

前面已经说过,Servlet容器先在客户端保存一个SessionID,以后,在浏览器发出HTTP请求时,都会包含这个SessionID.Servlet容器读取HTTP请求中的这个SessionID,根据这个SessionID从容器中取出HttpSession对像,以便于跟踪HTTP请求属于哪一个会话,这一过程称为会话的跟踪。

如果浏览器支持Cookie,Servlet容器就将SessionID作为Cookie保存在浏览器的客户端。但如果出于安全的考虑,用户禁用了Cookie,那么Servlet容器又如何来跟踪会话呢?

首先让我们在IE中禁用Cookie(注意:对于某些GHOST的系统不起作用)。

IE>工具>Internet选项>隐私>高级,然后禁用Cookie。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值