JavaWeb中的cookie和session

会话技术

 

Cookie


百度百科上的定义:

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息

 

原理:当浏览器首次访问服务器时,服务器会返回一个名字为set-cookie的响应头,其值为形如key=value的字符串,即set-cookie:key=value, 浏览器会将该键值对保留到缓存中;当浏览器再次访问服务器时,会发送一个名为cookie的请求头,即cookie:key=value

 

主要应用: cookie一般用于存储少量的不太敏感的数据,另外cookie允许在不登录的情况下,完成服务器对客户端的身份识别

 
 

java中对应的api


  1. 创建Cookie对象,绑定数据

    new Cookie(String name, String value);
    

     

  2. 发送Cookie对象,即返回set-cookie响应头到浏览器。

    response.addCookie(Cookie cookie);
    

     

  3. 拿到请求头cookie中的所有值

    Cookie[] cookies = request.getCookies();  
    

     

  4. 持久化存储, 设置cookie的存活时间。如果值为正数则将Cookie数据写到硬盘的文件中,时间到后,cookie文件自动失效。值为负数则为默认值,值为0删除cookie信息。

    // 设置cookie存活时间1个月
    cookie.setMaxAge(60 * 60 * 24 * 30);
    

     

cookie的共享


 
当一个服务器部署了多个项目时,为了使各个项目共享cookie,可以通过

void setPath(String url);

设置cookie的作用域,方法的参数是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp)

 

对于不同服务器,要实现cookie的共享,可以通过

void setDomain(String path);

如果设置一级域名相同,那么多个服务器之间cookie可以共享。例如通过setDomain(".baidu.com"),那么tieba.baidu.comnews.baidu.com中cookie可以共享

 
 

Session


广义上讲,session是客户端与服务器交互的抽象,而一般所说的session,则是在服务器内存上的,并可持久化到硬盘中,通常要借助cookie实现。

 

原理:客户端访问服务器后,会在服务器上创建session对象,在响应报文的响应头set-cookie中传入session-id。浏览器会将session-id存到cookie中,当再次访问时,在请求头cookie中放入session-id,这样服务器就知道是哪个session了。

 
 

java中对应的api


  1. 通过request对象获取session

    HttpSession session = request.getSession();
    

     

  2. 通过key获取session中的value

    Object getAttribute(String name)  
    

     

  3. 修改session的key-value

    // 设置
    void setAttribute(String name, Object value)
    // 移除
    void removeAttribute(String name)
    

     

 

关闭客户端


一般情况下,客户端关闭则会话结束,重新打开访问则是新的会话,为了使客户端关闭后下次仍访问到同一session, 可用如下代码

// 在客户端设置cookie,这样在客户端关闭后,再次请求服务器时可以通过id获取上次的Session
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);

 
 

关闭服务器


服务器正常关闭之前,会将session对象持久化到硬盘上,服务器启动后,将session文件转化为内存中的session对象。如果发现没有存储session对象,找到tomcat目录下的conf/context.xml把下面语句的注释了即可。

<Manager pathname="SESSIONS.ser" />

 

另外,idea在启动服务时,会删除上次保存session对象信息的SESSIONS.ser文件,因此通过idea启动的服务器无法做到关闭后重新访问之前的session

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值