Session 会话技术
Session
1什么是session
服务器端保存会话信息的技术.
2.怎么用
//如何获得session
HttpSession session = request.getSession();
//如何操作session
// session.setAttribute(arg0, arg1);
// session.getAttribute(arg0);
// session.removeAttribute(arg0);
// Enumeration<String> attributeNames = session.getAttributeNames();
3.原理
浏览器第一次访问服务器,服务器会在内存中开辟一个空间(session),并把session对应的ID发送给浏览器.
那么下次浏览器再去访问服务器,会把sessionID 交给服务器,服务器通过sessionID 找到刚才开辟的空间.
以上就是session的原理.
4.利用session的购物车例子
//1 获得 要添加 的商品(0~5)
String name = request.getParameter("name");
int intName = Integer.parseInt(name);
//2 将数字翻译成中文商品名称 (使用数组)
String[] products= new String[]{"肥皂","电动车","笔记本","小雨伞","八度空间","床单"};
String productName = products[intName];
//3 获得session getSession
HttpSession session = request.getSession();
//4 获得session中保存的购物车(Map)
Map<String,Integer> map= (Map<String, Integer>) session.getAttribute("car");
if(map!=null){
//获得到了 ==> 不是第一次访问 ==> 继续向Map中添加
Integer count = map.get(productName);
if(count==null){
//不存在==> 添加并设置数量为1
count = 1;
}else{
//map中已经存在这个商品 ===> 把数量加1
count++;
}
map.put(productName, count);
}else{
//没获得到 ==> 第一次访问
map = new LinkedHashMap<String, Integer>();
//新建Map==> 将商品添加并设置数量为1
map.put(productName, 1);
}
//5 将Map操作完再放回session
session.setAttribute("car", map);
//6 返回到列表页面(重定向)
response.sendRedirect(request.getContextPath()+"/car/list.jsp");
浏览器关闭,则session就丢了
4.session细节问题
1> 服务器让浏览器记住sessionID的cookie 默认过期时间是 (-1)==> 关闭浏览器 cookie就丢失 ==> cookie丢失 sessionID就丢失 ==> 找不到服务器的session
2> session中除了 4个操作 map的方法之外,还有哪些方法.
long getCreationTime() 获得创建时间
String getId() 获得sessionID
long getLastAccessedTime() 获得最后一次访问时间
int getMaxInactiveInterval() 获得session的寿命
void setMaxInactiveInterval(int interval) 设置session的过期时间
void invalidate() 让session立即失效
boolean isNew()
HttpSession session = request.getSession();
System.out.println(session.getCreationTime()); //创建时间
System.out.println(session.getLastAccessedTime());//最后一次访问session的时间
System.out.println(session.getId() );//获得sessionID
System.out.println(session.getMaxInactiveInterval());//获得最大存活时间
//setMaxInactiveInterval(int interval)
//invalidate 立即销毁session
System.out.println(session.isNew());//查看当前获得的session是否是新的.只有在第一访问服务器,session是新的.
session.invalidate();
3> 关于设置session的最大有效时间
默认是30分钟. ==> 在tomcat的web.xml中 <session-config> 配置的.
如何修改session的过期时间?
1.修改在tomcat的web.xml中 <session-config> ==> 影响服务器中的所有项目
2.在项目的web.xml中 加入<session-config> 配置.==> 影响的是当前项目
3.通过setMaxInactiveInterval(int interval)方法设置.==> 当前操作的session
4>(了解内容)URL重写
如果浏览器 禁用cookie功能不能保存任何cookie.那么session技术要是用 cookie来保存sessionID. 没有cookie怎么保存?
使用url重写解决该问题.
将页面中所有的连接 末尾全都加上 cookieid的参数. 这样用户点击连接访问网站,通过url把SeesionID带到了服务器.这样就解决了.
但是 互联网行业没有这么干的.