Session域对象

Session

在之前的博客中我们已经看到了。Cookie有很多问题,那么我们又有一种解决方法,它叫做session,Session是一种解决方安案,但是它不是cookie的代替方案

Session又是怎么来保持状态连接的?

Session是把数据保存到服务器端
Session底层依然使用Cookie

(1) 创建session
HttpSession session = req.getSession();

如果有session,那么直接拿到session
如果没有session,创建一个session,再拿到这个session

HttpSession session = req.getSession(boolean value);

Value:true -> 如果有直接拿,如果没有创建一个
Value:false ->如果有直接拿,如果没有返回null

(2) 怎么能在session里面设置值

语法:-session.setAttribute(String key, Object obj);

session.setAttribute("name", name);
session.setAttribute("user", user);
(3) 怎么从session里面取值

语法:req.getSession().getAttribute(String key);

req.getSession().getAttribute("name")
(4) 删除session中的值

根据一个key删除session中的一条记录

req.getSession().removeAttribute("name");

销毁整个Session对象

req.getSession().invalidate();
(5) 在session中存取一个对象
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) {
		HttpSession session = req.getSession();
		//在session中存储一个对象
		User user = new User();//自定义的类的实例
		session.setAttribute("user",user)
	}

将存入的对象取出(返回的是Object类型,需要转换会User类型)

User user = (User)req.getSession().getAttribute("user");
(6) session的生命周期(会话的生命周期)

从我们创建session开始,到关闭浏览器死亡
Session有超时时间,默认为30分钟
当我们没有操作开始计算

既然有默认的,那么我们就可以自定义一个时间(秒)

session.setMaxInactiveInterval(Integer interval);

也可以直接在web.xml中设制session的过期时间(单位分钟):

<session-config>
	<session-timeout>10</session-timeout>
</session-config>

如果设置为负数 , 关闭浏览器

(7) 禁用cookie后,怎么办(了解)

重写URL

http://localhost/session/single;jsessionid=372EC71FF0939E7C74B533B071714C5E

resp.encodeURL(“路径”) →资源重写解决这个问题

上传的功能中,上传的时候很有可能我们会使用flash组件。
Flash组件有一个问题:session丢失,这个时候就需要将jsessionid手动进行传递提交

注意:①很多网站/系统登陆就是使用session;
   ②Session有一个问题:所以内容都保存服务器内存里面,服务器内存有很大负担,慎用

(8) Session 和 Cookie区别

①Session把信息存在服务器,Cookie存在浏览器里面,Session底层通过cookie存jsessionid
②Session安全性比Cookie要一些
③Cookie存储值有限制
④Cookie不能存储对象 Session可以存取对象
⑤Cookie操作中文不方便
⑥Session服务器内存,注意不存入太多值,存储登录用户信息

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以通过将实体类对象存储在HttpSession中,实现向session中共享实体类对象的目的。具体实现方式可以是使用setAttribute方法将实体类对象存储在session中,然后在其它页面或请求中通过getAttribute方法获取该实体类对象,以实现数据共享的目的。以下是示例代码: ``` // 将实体类对象存储在session中 HttpSession session = request.getSession(); EntityObject entityObj = new EntityObject(); session.setAttribute("entityObj", entityObj); // 在其它页面或请求中获取实体类对象 HttpSession session = request.getSession(); EntityObject entityObj = (EntityObject) session.getAttribute("entityObj"); ``` 注意:需要保证实体类实现了序列化接口,否则可能会导致存储或读取失败。 ### 回答2: 要将实体类对象共享到Session中,可以通过以下步骤实现。 首先,需要在Servlet中获取当前的HttpSession对象。可以通过HttpServletRequest的`getSession()`方法来实现,代码如下: ```java HttpSession session = request.getSession(); ``` 然后,将实体类对象存储到Session中。可以通过使用`setAttribute()`方法将实体类对象作为属性存储到Session中,代码如下: ```java session.setAttribute("实体类对象的名称", 实体类对象); ``` 其中,将"实体类对象的名称"替换为实际的名称,将"实体类对象"替换为需要共享的实体类对象。 接下来,在需要获取实体类对象的地方,可以使用`getAttribute()`方法从Session中获取实体类对象,代码如下: ```java 实体类类型 实体类对象 = (实体类类型) session.getAttribute("实体类对象的名称"); ``` 其中,将"实体类类型"替换为实际的实体类类型,将"实体类对象的名称"替换为之前存储时的名称。 最后,如果需要从Session中移除实体类对象,可以使用`removeAttribute()`方法,代码如下: ```java session.removeAttribute("实体类对象的名称"); ``` 这样就可以实现将实体类对象共享到Session中,并在需要的地方获取和移除它了。 ### 回答3: 在Java web开发中,我们可以通过使用Session来共享实体类对象。下面是一种实现方式: 1. 首先,在Servlet中获取Session对象: HttpSession session = request.getSession(); 2. 然后,创建一个实体类对象设置其属性: Entity entity = new Entity(); entity.setName("John"); entity.setAge(20); 3. 将实体类对象添加到Session中: session.setAttribute("entity", entity); 4. 之后,在其他Servlet或JSP页面中可以通过以下方式获取和使用共享的实体类对象: Entity entity = (Entity) session.getAttribute("entity"); String name = entity.getName(); int age = entity.getAge(); // 进行其他操作... 通过这种方式,我们就可以在Session中共享实体类对象。需要注意的是,在使用Session时,要确保实体类对象是可序列化的,即实体类需要实现Serializable接口,这样才能在Session之间进行传输和共享。另外,还要注意在合适的时机从Session中移除对象,避免造成过多的内存占用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值