Servlet会话

Servlet (第二部分 p1-p6)

1. 会话

客户端 服务端(B/S)

  1. 服务端给客户端又给信件,客户端下次访问服务端带上信件就可以:cookie

  2. 服务器登记过,你过来了,下次来的时候我匹配你: session

    cookie

    • 客户端技术(响应,请求)

session

​ 服务端技术,利用这个技术,我们可以保存用户的会话信息,我们可以把信息或者数据放在session中

常见场景

  • 网站登录之后,你下次不用再登录了,第二次访问直接就上去了。记住密码

2. Cookie

免登录

有一个专门操作Cookie的类 javax.servlet.http.Cookie。随着服务器端的响应发送给客户端,保存在浏览器。当下次再访问服务器时把Cookie再带回服务器。

概念: 客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问

  1. 从请求中拿到cookie信息

  2. 服务器响应给客户端cookie

cookie:一般会保存在本地的用户目录下/AppData下

一个网站cookie是否存在上限?

  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,每个web站点(同一个域名下)最多存放20个cookie( 不同的浏览器会有所不同)
  • cookie大小有限制4kb
  • 浏览器上限是300个cookie

删除cookie

  • 不设置有效期,关闭浏览器,自动失效
  • 设置有效期时间为0

Cookie是浏览器提供的一种技术,通过服务器的程序能将一些只须
保存在客户端,或者在客户端进行处理的数据,放在本地的计算机
上,不需要通过网络传输,因而提高网页处理的效率,并且能够减
少服务器的负载,但是由于 Cookie 是服务器端保存在客户端的信
息, 所以其安全性也是很差的。

Cookie 的格式:键值对用“=”链接,多个键值对间通过“;”隔开。

2.1 Cookie的创建和发送

//创建Cookie对象
Cookie cookie = new Cookie("name","zs");
//发送cookie对象
resp.addCookie(cookie);

2.2 Cookie的获取

服务器端只提供了一个 getCookies()的方法

// 获取Cookie数组
Cookie[] cookies = req.getCookies();
// 判断数组是否为空
if (cookies != null && cookies.length > 0) {
   
    //遍历
    for (Cookie cookie : cookies){
   
        System.out.println(cookie.getName());
        System.out.println(cookie.getValue());
    }
}

2.3 Cookie设置到期时间

默认情况下,当浏览器关闭后,Cookie数据被销毁

手动设定 cookie 的有效时间(通过到期时间计算),通过 setMaxAge(int time);方法设定 cookie 的最大有效时间,以秒为单位。

  • 负整数 若为负数,表示不存储该 cookie。默认情况

    ​ cookie 的 maxAge 属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。

  • 正整数 若大于 0 的整数,表示存储的秒数。

    ​ 表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。

  • 零 若为 0,表示删除该 cookie。

                   //cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的 setMaxAge(0)来删除这个 Cookie。 无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。

2.4 Cookie的注意点

  1. Cookie保存在当前浏览器中。
  2. Cookie存中文问题 通过URLEncoder.encode()来进行编码,获取时通过URLDecoder.decode()来进行解码。
  3. 同名Cookie问题 服务器端发送重复的Cookie那么会覆盖原有的Cookie。
  4. 浏览器存放Cookie的数量是有上限的.Cookie存储的大小是有效的,一般不超过4kb

2.5 Cookie的路径

Cookie的setPath设置cookie的路径,这个路径直接决定服务器的
请求是否会从浏览器中加载某些cookie。

情景一:当前服务器下任何项目的任意资源都可获取Cookie对象,设置路径为"/"

情景二:当前项目下的资源可获取Cookie对象 (默认不设置Cookie的path)

情景三:指定项目下的资源可获取Cookie对象

情景四:指定目录下的资源可获取Cookie对象

3. HttpSession对象

HttpSession对象是 javax.servlet.http.HttpSession 的实例

(1) Session用于存储一次会话的多次请求数据,存在服务器端,一次会话只有一个session对象
(2) Session可以存储任意类型,任意大小的数据。
(3) Session 会话中,我们经常用来保存用户登录之后的信息

Session 的作用就是为了标识一次会话,或者说确认一个用户;并
且在一次会话(一个用户的多次请求)期间共享数据。我们可以通
过 request.getSession()方法,来获取当前会话的 session 对象。

// 如果session对象存在,则获取;如果session对象不存在,则创建
HttpSession session = request.getSession();

/**
 * Session对象
 *  session对象的获取
 *      request.getSession()
 *      当获取session对象时,会先判断session对象是否存在,如果存在,则获取session对象;如果不存在,则创建session对象
 *  常用方法
 *      获取session的会话标识符      getId()
 *      获取session的创建时间        getCreationTime()
 *      获取最后一次访问时间         getLastAccessedTime()
 *      判断是否是新的session对象    isNew()
 */
@WebServlet("/ser01")
public class Session01 extends HttpServlet {
   
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值