Session技术,依赖于Cookie
简述一下Cookie和Session的区别:
Cookie是把用户的数据写给用户的浏览器,浏览器保存
Session把用户的数据写到用户独占的Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
Session标识传递的流程图:
Session目前支持的方法
方法
返回值
作用
getCreateTime():
long
获取创建时间
getID():
String
获取id
getLastAccessedTime():
long
获取最后一次访问时间
getServletContext():
ServletContext
ServletContext对象
setMaxInactiveInterval(int):
void
设置最大时间
getMaxInactiveInterval():
int
获取最大时间
getAttribute(String):
Object
获取节点
getAttributeNames():
Enumeration
获取节点名称
setAttribute(String, Object):
void
设置节点
removeAttribute(String):
void
移除节点
invalidate():
void
注销
isNew():
boolean
是否新
常用的方法
1、通过request请求获取Session对象
HttpSession session = request.getSession();
2、必须以键值对的形式往Session存储数据
session.setAttribute("username", "广涛");
3、获取、删除Session
session.getAttribute("username") // 获取数据
session.removeAttribute("username"); // 删除数据
4、获取Session的id
String sessionId = session.getId();
5、判断Session是否为新创建
if (session.isNew()) {
resp.getWriter().write("session创建成功,ID:" + sessionId);
} else {
resp.getWriter().write("session已经在服务器中存在了,ID:" + sessionId);
}
使用session:
package com.guangtao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class sessionDemo1 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 解决乱码问题
req.setCharacterEncoding("GBK");
resp.setCharacterEncoding("GBK");
HttpSession session = req.getSession();
session.setAttribute("username", "广涛");
String sessionId = session.getId();
if (session.isNew()){
resp.getWriter().write("session创建成功,ID:" + sessionId);
}else {
resp.getWriter().write("session已经在服务器中存在了,ID:" + sessionId);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
设置Session的有效期: 使用HttpSession的invalidate方法来设置失效时间
session.setMaxInactiveInterval(24*60*60); // 单位为秒