session java web_javaweb开发中的session

之前我们介绍的cookie是把用户的身份信息存在了客户端,而session说白了就是把用户的信息保存在了服务端。由于session是保存在了服务端,所以当用户关闭浏览器时session并不会消失。一般session保存在服务器的内存中当然也可以持久化到硬盘或者数据库中。session的默认过期时间是30分钟,过期的session会被服务器自动的销毁。注意如果大量的创建session可能导致服务器的内存溢出。

一、session的创建流程

当客户端浏览器访问服务器时,服务器会先检查该请求是否携带一个叫JESESSIONID的cookie,如果存在会根据JESESSIONID的cookie值获取存放在服务器端的session值;如果不存在会新建一个session然后把sessionId写到cookei中返回给浏览器,下次浏览器访问时就会携带这个cookie。

cfa1b642e92091bdf74379e41e33e4a6.png

图片的来源地址:http://blog.tommyyang.cn/img/session/processofsession.png

在javaweb开发中我们使用HttpServlet对象获取session,session也是一个域对象可以通过setAttribute方法和getAttribute方法获取存储在session中的值。代码如下:

public class TestSessionServlet extendsHttpServlet{private static final long serialVersionUID = 1L;

@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {

doPost(req,resp);

}

@Overrideprotected voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

HttpSession session=request.getSession();

response.setCharacterEncoding("utf-8");

response.setHeader("content-type","text/html;charset=UTF-8");

PrintWriter writer=response.getWriter();

String loginName= (String) session.getAttribute("loginName");

String sessionId=session.getId();if(StringUtils.isEmpty(loginName)){

session.setAttribute("loginName","张三");

writer.println("session中没有值!");

}else{

writer.println("loginName="+loginName);

}

writer.println("sessionId="+sessionId);

writer.close();

}

}

用户第一次访问时:

82cb3950530e0fabf005a97d333f3126.png

服务端没有session会在给浏览器响应时添加一个cookie,当用户第二次访问时:

78084703c4969cb9e074e2cedd974ede.png

会携带这个cookie。当浏览器被禁用cookie后服务器端可以通过重写URL地址实现sessionId的传递。在java中我们使用HttpServletResponse对象的encodeURL(java.lang.String url)方法和encodeRedirectURL(java.lang.String url)方法实现URL的重写,其中前者是对表单action和超链接的url地址进行重写,后者是对重定向后的地址进行重写。

二、session的销毁

session默认的过期时间是30分钟,当然这个过期时间也可以我们自己来修改但是我们一般不会修改session的过期时间而是手动让session失效只需要调用HttpSession对象的invalidate方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值