欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java web中的cookie和session会话

程序员文章站 2024-02-28 00:00:15
...

会话技术

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

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

会话技术分为: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默认作用范围在一次会话当中