java session与cookie_Java篇-Session与Cookie

一 : 会话技术

从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话,会话技术就是记录这次会话中客户端的状态与数据的.会话技术是帮助服务器记住客户端状态的.

二 : Cookie

Cookie 是将用户的数据存储到客户端的技术.服务器端将Cookie发送到客户端 :

cookie.setPath(" ")  如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //创建COOKIE对象

Cookie cookie = new Cookie("name", "jingjing");        //为cookie设置持久化时间,cookie信息在硬盘上存的时间

cookie.setMaxAge(60*10);        //为cookie设置携带的路径//      cookie.setPath("/WEBpro/sendcook");//访问sendcookie资源时携带这个cookie

//访问WEBpro下任何资源的时候都携带这个cookie

cookie.setPath("/WEBpro");

//访问服务器下的所有资源都携带这个cookie//      cookie.setPath("/");

//将cookie中有存储的信息发送到客户端

response.addCookie(cookie);

}服务器端接受客户端携带的Cookie :

显示最后一次访问时间demo//获得当前时间

Date date = new Date();

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");        String time = format.format(date);

//创建cookie记录当前最新访问时间

Cookie cookie = new Cookie("accessTime", time);

cookie.setMaxAge(60*10);

response.addCookie(cookie);

//获得客户携带的cookie

String lastTime = null;

Cookie[] cookies = request.getCookies();        if (cookies != null) {            for (Cookie cook : cookies) {                if (cook.getName().equals("accessTime")) {

lastTime = cook.getValue();

}

}

}        //设置显示中文

response.setContentType("text/html;charset=UTF-8");        if (lastTime == null) {

response.getWriter().write("您是第一次访问,祝愉快");

}else {

response.getWriter().write("上次的访问时间是 : " + lastTime);

}

}删除客户端的cookie

删除客户端存储的cookie信息,使用同名同路径的持久化时间为0的cookie进行覆盖.protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //删除客户端name:"..."的cookie信息

Cookie cooie = new Cookie("name", "");        //将path设置与要删除的cookie path一致

cooie.setPath("/WEBpro");        //设置时间是0

cooie.setMaxAge(0);

response.addCookie(cooie);

}

三 : Session技术

Session技术是将数据存储在服务器端的技术,会为每一个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间. Session的实现是基于Cookie,Session需要借助Cookie存储客户端唯一标识JESSIONID获取Session对象//创建属于该客户端(会话)私有的session区域

/*

* 内部判断该客户端是否在服务器已经存在session,如果客户端在服务器不存在session,那么创建一个

* 新的session对象

* 如果该客户端在服务器已经存在session,获得已经存在的session返回.

* */

HttpSession session = request.getSession();        String id = session.getId();

当浏览器关闭,Session并没有销毁,而是Cookie中保存的JESSIONID没有了,没有了这把钥匙,就无法在服务器中寻找对应的Session空间手动创建一个JSESSIONID的cookie,为该cookie设置持久时间HttpSession session = request.getSession();

String id = session.getId();

//回写前手动创建一个JSESSIONID的cookie,为该cookie设置持久时间

Cookie cookie = new Cookie("JSESSIONID", id);

cookie.setPath("/WEBpro/");

cookie.setMaxAge(10*60);

response.addCookie(cookie);

session.setAttribute("name", "hello");

response.getWriter().write(id);Session域对象

Session 是一个域对象

有如下方法session.setAttribute(String name,Object obj);

session.getAttribute(String name);

session.removeAttribute(String name);//从session中获得存储数据

HttpSession session = request.getSession();        String name = (String)session.getAttribute("name");

response.getWriter().write(name);

四 : Session对象的生命周期

创建 :

第一次request.getSession()

销毁 :

① : 服务器关闭时(非正常)

② : session过期/失效(默认30分钟)

可以在web.xml中配置

超时时间是从不操作服务器端的资源开始计时.

30

③ : 手动销毁sessionsession.invalidate();

五 :  session原理

每一个客户端(用户)对应服务器端一块内存区域.通过客户端存的编号(JSESSIONID)找寻相应的内存空间,如果找不到则创建新的.Cookie属于会话级别的,当一次会话结束时,cookie即可消失,所以想要保存cookie就要设置cookie的存活时间,而Session在服务器中存储,客户端关闭,并不会让Session消失.依然保存在服务端.

AAffA0nNPuCLAAAAAElFTkSuQmCC

原理

作者:TianTianBaby223

链接:https://www.jianshu.com/p/f07065587683

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值