Servlet学习----session详解

73 篇文章 0 订阅
26 篇文章 0 订阅

Cookie与Session特点

         1.Cookie特点:

  • 会话数据放在浏览器端
  • 数据类型只能String,而且有大小限制
  • 相对数据存放不安全

          2.Session特点:

  • 会话数据存放在服务器端(服务器内存),占用服务器资源
  • 数据类型任意类型,没有大小限制
  • 相对安全

HttpSession对象

          1.创建HttpSession对象,用于保存会话数据

session = request.getSession();   //创建或获取session对象

           2.修改HttpSession对象

void invalidate()手动销毁session对象
void setMaxInactiveInterval(int interval)设置session对象的有效时间
void setAttribute(String name, Object value)该方法使用指定的名称绑定一个对象到该 session 会话。
void removeAttribute(String name)该方法将从该 session 会话移除指定名称的对象。

            3.保存会话数据作为域对象

session.setAttribute("name",Object);   //保存数据
session.getAttribute("name");          //获取数据
session.removeAttribute("name");       //删除数据

Session原理 

  • 1 服务器创建session对象,服务器给这个session对象分配一个唯一的标记JSESSIONID
  • 2 把JSESSIONID作为cookie发送给浏览器
  • 3 浏览器得到JSESSIONID保存下来,在下次访问的时候发送给服务器。
  • 4 服务器得到JSESSIONID,在服务器内存中搜索是否存在指定JSESSIONID的session对象
  • 5 如果找到,则返回该session对象
  • 6 如果找不到,可能返回null,也有可能创建一个session。
    以上六个步骤,都在下面这句话中执行了。
    HttpSession session = request.getSession();

结论:通过JSESSIONID在服务器中查询对应的session对象。

举例:服务器怎样区分不同的浏览器会话?

           前提:可以从session对象取出数据是存放数据的session对象

     <1>浏览器1-窗口1(001):

//创建HttpSession对象
HttpSession session = request.getSession();   //给session对象分配001
//保存会话
session.setAttribute("name","jacky");

    <2>浏览器1-窗口2(001):

//得到session对象
HttpSession session = request.getSession();  //搜索001的session对象
//获取会话数据
String name = (String)session.getAttribute("name");     //可以得到!!!!

     <3>浏览器2(没有标记或不是001): 

//得到session对象
HttpSession session = request.getSession();  
//获取会话数据
String name = (String)session.getAttribute("name"); //不可以得到!!!

       <4>新的浏览器1(没有标记或不是001): 

//得到session对象
HttpSession session = request.getSession();  
//获取会话数据
String name = (String)session.getAttribute("name"); //不可以得到!!!

session细节

          1.setMaxInactiveInterval(秒):设置session对象的有效时间

<!-- 设置全局的session有效期(分钟) -->
  <session-config>
    <session-timeout>1</session-timeout>
  </session-config>

             注:默认情况下,等待30分钟空闲时间,session对象才会销毁。(不是浏览器关闭,session对象就销毁!) 

          2.设置JSESSIONID不会随着浏览器的关闭而关闭

Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(1*30*24*60*60);//设置一个月的有效期
response.addCookie(cookie);

          3.通过invalidate()方法直接销毁session对象

          4.request.getSession()   

 request.getSession(true):查询session对象,如果没有session对象,创建新的session对象
 request.getSession(false):如果没有session对象,返回null。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值