cookie和session机制

一、cookie和session的产生

在 web 1.0时期,通过网络访问的大多是静态资源,比如请求访问某个静态页面,服务器直接返回一个静态页面,这样的请求不涉及交互,不需要记录客户端数据的上下文(请求是否来自同一个客户端,这个客户端之前有什么历史数据记录等等),因为http协议是无状态的,每个请求都视为是一个新的请求,服务器无法识别哪些请求是来自同一个客户端。但随着互联网发展,在 web 2.0时期,数据需要交互,于是cookie和session机制就诞生了。

cookie和session应用最广泛的场景是用于保存用户的登录信息。假设有这样一个网站,用户访问就必须注册登录。当用户第一次访问时,正常注册登录后访问,可是当用户继续访问,发送第二个请求时,则需要再次登录,因为http请求是无状态的,所以为了解决重复登录的问题,可以在服务器端生成一个session对象用于保存用户的登录信息,同时将session对象通过响应返回给客户端并保存在客户端的cookie中,后续客户端再次发送请求时,则在请求中携带cookie数据,服务器第二次及以后收到请求时,直接从cookie中获取session对象用于判断用户身份信息,而不需要用户再次输入用户名、密码登录的操作。

二、会话:(同一个)浏览器和服务器之间的连接称之为会话,一方断开连接则会话关闭。一次会话可以包含多个请求和响应。

三、cookie

cookie是在浏览器存储数据的机制,是http协议的一部分。在浏览器第一次向服务器发送请求时,服务器可以生成Cookie对象,并通过HttpResponse对象将cookie对象通过响应头的set-cookie属性发送给浏览器,浏览器可以将cookie数据保存在本地。

Cookie cookie = new Cookie("name","value");
response.addCookie(cookie);

在后续的请求中,浏览器会把cookie数据通过请求头的cookie属性发送给服务器。服务器通过HttpRequest对象进行解析。通常浏览器会保存很多cookie信息,所以发送请求时也是将全部的cookie都发送过去。

Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
    String name = cookie.getName();
    String value = cookie.getValue();
}

cookie默认存储在浏览器内存中,浏览器关闭,则内存释放,cookie销毁,可以通过cookie.setMaxAge(int seconds)设置存活时间。默认值为负数,即浏览器关闭,cookie销毁。cookie默认不支持中文,可以通过url转码的方式存储。

String value = URLEncoder.encode("中文","UTF-8")

String value = URLDecoder.decode(value,"UTF-8")

四、session

session是在服务器端存储的数据的机制,session不是http协议的内容,但是session依赖于cookie。可以通过HttpServletRequest对象的getSession()方法得到session对象,通过session.setAtrribute()方法在session对象中存储数据,同时tomcat会生成唯一的sessionId,也就是JsessionId,通过响应体的set-cookie属性,将sessionId保存在cookie中,在后续请求中,请求头会携带sessionId给到服务器,服务器通过sessionId找到session对象,用于识别请求来自哪个用户。sessionId是建立在连接的情况下,每次断开连接都会新生成一个sessionId。

以记录用户登录信息来说,在执行用户登录的方法时,将用户信息的类对象保存在session中,那么tomcat会生成唯一的sessionId通过响应发送给浏览器,并保存在cookie中,浏览器后续发送请求则自动带上cookie,服务器的session对象通过键进行解析得到用户信息的类对象,通过类对象进行判断请求,进行用户登录及权限判断。

HttpSession session = request.getSession(true);  //会话存在则返回,不存在则新建会话

session.setAttribute("KEY",userinfo);  //userinfo表示用户信息类对象

session钝化:服务器正常关闭时,tomcat会自动将session数据写到硬盘

session活化:服务器启动时,加载session数据

默认情况下,session存活时间是30min,可以配置tomcat > web.xml > session-config标签内的时间设置,或者调用session.invalidate()方法销毁。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值