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带到了服务器.这样就解决了.
但是 互联网行业没有这么干的.

原文地址:https://www.cnblogs.com/nuoyinsomnus/p/7883790.html