java web中的cookie和session会话

会话技术

从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。

会话技术就是记录这次会话客户端的状态与数据的。

会话技术分为:Cookie和Session:

Cookie:数据存储在本地客户端,减少服务器端的存储压力,安全性不好 ,客户端可以清楚cookie。

Session:数据存储在服务端,安全性较好,增加服务器的压力。


Cookie技术:

Cookie技术是降用户的数据存储到客户端的技术,重要的知识点包括以下两点:

1.服务器端怎么将一个Cookie发送都客户端

  1)创建Cookie:

        Cookie cookie=new cookie(String cookieName,Strint cookieValue);

       

Cookie cookie=new cookie("username","zhangsan");

        注意:Cookie中不能保存中文。

  2)设置Cookie持久化时间:

        Cookie默认为会话级别,Cookie存储在浏览器内存当中,即关闭浏览器则销毁Cookie,设置Cookie持久化时间可以把                  Cookie存储到当前浏览器所在的磁盘文件当中。      

         cookie.setMaxAge(int seconds);  // seconds为秒。

         cookie.setMaxAge(10*60);//设置为10分钟,过期删除Cookie信息。

  3)设置携带路径

        cookie携带路径默认为当前项目,即访问当前项目下的所有资源都会携带cookie信息。
       

 cookie.setPath(String path);

        cookie.setPath(/web);//访问web工程目录下的所有资源都会携带cookie信息。

        cookie.setPath(/web/loginServlet);//只有在访问longinServlet时才会携带cookie信息。

  4)向客户端发送cookie:

       

 response.addCookie(Cookie cookie);

  5)删除客户端的cookie:
       要删除一个cookie信息很简单,将他的持久化时间设置为0即可,需要注意的是cookie的名字要相同,携带路径也要相同,           如果没有设置携带路径则为当前目录,删除客户端的cookie就是两个字:“覆盖”。删除cookie信息的代码如下:

Cookie cookie=new cookie("username","");//名字一定要与要删除的cookie一致
cookie.setMaxAge(0);//将其cookie的持久化时间设置为0
cookie.setPath(/web);//设置携带路径
response.addCookie(cookie);//发送给客户端覆盖要删除的cookie

2.服务端怎样接受客户端携带的Cookie.

  1)通过request获得所有的cookie:

        Cookie[] cookies=request.getCookies();

  2)通过遍历Cookie数组来获得对应的cookie     

  for(Cookie coo : cookies){

        if(cookie.getName().equals(cookieName))
             cookieVlaue=cookie.getValue();//通过获得cookie的名字,名字相同则将值拿出来即可
        }

Session技术

Session是将数据存储在服务端,会为每一个客户端都创建一块内存空间存储客户数据,客户端需要一个唯一的ID去服务器中寻找对应的内存空间。Session是基于Cookie实现,Session需要借助Cookie存储客户的唯一标识JSESSIONID。

这里要注意,cookie一定要设置一个合适的持久化时间,否则浏览器一关闭则会为再次打开的浏览器分配一个JSESSIONID,也就是会在为客户分配一个地址空间

1.获得Session对象

      HttpSession session=request.getSession();

      此方法会获得专属当前会话的Session对象,如果服务器端没有该会话的Session对象, 那么会为其创建一个新Session返回(实质上就是根据JSESSIONID判断该客户端是否已经在服务器上已经存在session)

2.怎么向session中存取数据(session是一个对象域)

    

session.setAttribute(String name,object obj);//向session域中放数据
session.getAttribute(String name);//根据name从session域中获取数据
session.removeAttribute(String name);//根据name将数据从session域中移除
session.invalidate();//此方法用于销毁session域

session生命周期为:

创建:第一次指定request.getSession();

销毁:服务器关闭(非正常销毁),session失效/过期(默认30分钟),手动session.invalidate()方法销毁。

session默认作用范围在一次会话当中

猜你喜欢

转载自blog.csdn.net/qq_38475119/article/details/81332111