会话技术Cookie & Session

【前言】

 知识是积累出来的。

【过程】

1.会话技术简介

会话技术是帮助服务器记住客户端状态。从打开一个浏览器访问一个站点,到关闭这个浏览器的整个过程,称为一次会话。会话技术就是记录这次会话中客户端的状态和数据的。

2.Cookie技术

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


1)服务器端向客户端发送一个Cookie  创建cookie对象

Cookie cookie=new Cookie(“name”,“zhangsan”);
//为cookie设置持久化时间----  cookie信息在硬盘上保存的时间
   cookie.setMaxAge(60*10);//10分钟
//为cookie设置携带的路径
  cookie.setPath("/");//访问服务器下所有的资源都携带这个cookie

注意.如果不设置携带路径,那么该cookie信息会在访问该cookie的web资源所在的路径都携带cookie信息

例:

cookie.setPath("/WEB16");
代表访问WEB16应用中的任何资源都携带cookie
cookie.setPath("/WEB16/cookiesServlet");
代表访问WEB16中的cookieServlet时才携带cookie信息

2)将cookie中存储的信息发送到客户端--请求头

  response.addCookie(cookie);
//设置Cookie在客户端的持久化时间:
Cookie.setMaxAge(int seconds);    ---时间秒

注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里。

3)删除客户端的cookie:如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可

//删除客户端保存name=zhangsan的cookie信息
Cookie cookie=new Cookie("name","");
//将path设置成要与删除cookie的path一致
Cookie.setPath("/WEB16");
//设置时间是0
Cookie.setMaxAge(0);

3.Session技术


1)获得本客户端的session对象

//创建属于该客户端(会话)的私有的session区域
/*
request.getSession()方法内部会判断该客户端是否在服务器端已经存在session,如果该客户端在此服务器不存在session 那么就会创建一个新的session对象,如果该客户端在此服务器已经存在session,获得已经存在的该session返回
*/
HttpSession session =request.getSession();
String id=session.getId(); //该session对象的编号id
response.getWriter().write("JSESSIONID:":id);
2)向session中存取数据
//从session中获得存储的数据
HttpSession session=request.getSession();
String attribute=(String)session.getAttribute("name");
response.getWriter().write(attribute);

3)session对象的生命周期

创建:第一次执行request.getSession()时创建

销毁:(1)服务器(非正常)关闭时

           (2)session过期/失效(默认30分钟)

             (3)手动销毁session   session.invalidate();

4.Cookie技术实现显示用户上次访问时间代码


//获得当前时间
Date date =new Date()
SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String currentTime=fromat.format(date);

//1.创建cookie记录当前最新的访问时间
Cookie cookie =new Cookie("lastAccessTime",currentTime);
cookie .setMaxAge(60*10);
response.addCookie(cookie);
//2.获得客户端携带cookie -----lastAccessTime
String lastAccessTime=null;
Cookie[]cookies=request.getCookies();
if(cookies!=null){
   for(Cookies coo:cookies){
      if ("lastAccessTime".equals(coo.getName())){ 
      lastAccessTime=coo.getValue();
   }

 }
}

response.setContenttype("text/html;charset=UTF-8");
if(lastAccessTime==null){
    response.getWriter().write("您是第一次访问");
}
else{
    response.getWriter().write("您上次的访问的时间是:"+lastAccessTime);
}

【总结】

知识是总结出来的,多总结,多读书。

会话技术是Web开发中用于跟踪用户状态的重要手段,其中cookiesession是两种常见的会话技术。它们的主要区别在于数据的存储位置处理方式。 ### Cookie Cookie是一种由服务器发送给客户端(通常是浏览器)的数据片段,客户端会将这些数据存储在本地,并在后续的请求中将其发送回服务器。 1. **存储位置**:客户端(浏览器)。 2. **生命周期**:可以设置过期时间,如果没有设置,则在浏览器关闭时失效。 3. **安全性**:数据存储在客户端,存在被篡改的风险。可以设置HttpOnlySecure属性来增强安全性。 4. **容量限制**:每个域名下的cookie数量大小有限制(通常不超过4KB)。 ### Session Session是一种服务器端的技术,用于在服务器上存储用户的状态信息。服务器会为每个用户创建一个唯一的会话ID,并通过cookie或URL重写将该ID发送给客户端。 1. **存储位置**:服务器端。 2. **生命周期**:默认情况下,session在浏览器关闭时失效,但可以通过设置超时时间来延长。 3. **安全性**:数据存储在服务器端,相对更安全。 4. **容量限制**:服务器端的存储容量通常较大,但受限于服务器配置。 ### 应用场景 - **Cookie**:用于存储一些不敏感的信息,如用户的偏好设置、登录状态等。 - **Session**:用于存储敏感信息,如用户的登录凭证、购物车内容等。 ### 示例 ```javascript // 设置cookie document.cookie = "username=John Doe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/"; // 获取cookie function getCookie(name) { let value = "; " + document.cookie; let parts = value.split("; " + name + "="); if (parts.length === 2) return parts.pop().split(";").shift(); } // 使用session // 假设使用Node.jsExpress框架 const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true })); app.get('/login', (req, res) => { req.session.user = { name: 'John Doe' }; res.send('Logged in'); }); app.get('/dashboard', (req, res) => { if (req.session.user) { res.send('Welcome, ' + req.session.user.name); } else { res.send('Please login'); } }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值