【Cookie、Session、Token】与【Request、Response】

一、Request、Response简单介绍

Request是浏览器请求头,请求头有什么信息,Request就有什么信息。
Response是浏览器响应头,响应头有什么信息,Response就有什么信息。

二、cookie、session、token的流程

1. cookie的流程

(数据保存在浏览器)
在这里插入图片描述

2. session的流程

(数据保存在服务器,sessionID保存在浏览器)
在这里插入图片描述
在这里插入图片描述

3. token流程

(数据跟token经过加密在浏览器,服务器保存加密的密钥)
在这里插入图片描述

三、cookie、session、token的使用

1. cookie的简单使用示例

服务器将Cookie添加到浏览器

// 设置Cookie的key-value
Cookie cookie1 = new Cookie("username","Adam");
// 设置Cookie的有效时间,以秒为单位
cookie1.setMaxAge(60 * 60 * 24);
// 设置路径:cookie.setPath(“/项目名/路径”),这样设置只有访问“/项目名/路径”下的的资源才会携带 Cookie
cookie1.setPath(getServletContext().getContextPath() + "/");
// 通过response响应,在浏览器中添加的Cookie
response.addCookie(cookie1);

服务器读取浏览器发来的Cookie

// 从request中获取所有cookie
Cookie[] cookies = request.getCookies();
// 遍历Cookie
for(Cookie c : cookies){
	// 获取cookie的键值对
	String cookieKey = c.getName();
	String cookieValue = c.getValue();
	System.out.println("CookieKey:" + cookieKey + ",CookieValue:" + cookieValue);
}

2. session的简单使用示例

// 在请求头中根据sessionID获取对应的session
HttpSession session = request.getSession();
// 向session中添加键值对key-value
session.setAttribute("username", username);
// 从session中得到key对应的属性值
String username1 = session.getAttribute("username");
// 设置最长访问间隔时间
session.setMaxInactiveInterval(60*60*24);
// 删除session中对应的属性
session.removeAttribute("username");
// 获取sessionID
String id = session.getId();
// 使session立即无效
session.invalidate();

3. token的简单使用示例

token的工具类

public class TokenUtil{

	// 根据传进来的user的属性来生成Token
	public String generateToken(User user){
		// 获取现在的时间
		Date start = new Date();
		// 设置一小时有效时间
		long currentTime = System.currentTimeMillis() + 60 * 60 * 1000;		
		Date end = new Date(currentTime);
		
		// 生成token
		String token = "";
		token = JWT.create()
                .withAudience(user.getId().toString())
                .withAudience(user.getUsername())
                .withIssuedAt(start)
                .withExpiresAt(end)
                .sign(Algorithm.HMAC256(user.getPassword()));
         
        // 返回token
       	return token;
	}

	// 获取制定token中某个属性值
    public static String get(String token, String key) {
        List<String> list= JWT.decode(token).getAudience();
        String userId = JWT.decode(token).getAudience().get(0);
        return userId;
    }

	// 获取token
    public String getToken(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        for (Cookie c :
                cookies) {
            if (c.getName().equals("token")) {
                return c.getValue();
            }
        }
        return null;
    }
}

服务器生成Token并添加到浏览器的Cookie中

public class UserServiceImpl implements UserService{
	@Autowired
	private UserMapper userMapper;
	
	@Autowired
	TokenUtil tokenUtil;

	public R loginCheck(User user, HttpServletResponse response){
		User user2 = userMapper.selectByName(user.getUsername());
		if(user2 == null){
			return R.error().message("该用户不存在!");
		}
		if(!user2.getPassword().equals(user.getPassword())){
			return R.error().message("密码错误!");
		}

		// 获取token
		String token = tokenUtil.generateToken(user2);
		// 将token放在Cookie中
		Cookie cookie = new Cookie("token", token);
		// 将token的Cookie保存到浏览器中
		response.addCookie(cookie);
	}	
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的第一个问题是关于Web开发方面的。我可以回答您。 1. 利用request对象获取页面传递的参数: 在Web开发中,我们通常需要从前端页面获取一些数据。这些数据可以通过HTTP请求的参数传递给后台程序。在Python中,我们可以通过request对象来获取这些参数。 例如,如果我们想要获取名为“username”的参数,可以使用以下代码: ``` from flask import Flask, request app = Flask(__name__) @app.route('/login', methods=['POST']) def login(): username = request.form.get('username') password = request.form.get('password') # 其他操作 return 'success' ``` 在这个例子中,我们使用了Flask框架,当请求方式为POST时,我们可以通过request.form.get()方法获取POST请求中传递的参数。 2. 利用response对象把后台数据响应到页面: 在Web开发中,我们通常需要把后台处理的数据返回给前端页面。在Python中,我们可以通过response对象来实现这个功能。 例如,如果我们想要返回一个JSON格式的数据,可以使用以下代码: ``` from flask import Flask, jsonify app = Flask(__name__) @app.route('/data', methods=['GET']) def get_data(): data = {'name': 'Tom', 'age': 18, 'gender': 'male'} return jsonify(data) ``` 在这个例子中,我们使用了Flask框架,当请求方式为GET时,我们返回一个包含name、age和gender属性的JSON格式的数据。其中,jsonify()方法可以将Python对象转换为JSON格式的数据。 3. 利用cookiesession对象保持登陆状态: 在Web开发中,我们通常需要实现登陆和注销功能。为了保持用户登陆状态,我们可以使用cookiesession对象。 cookie是存储在用户浏览器中的小文件,可以用来保存一些用户状态信息。例如,当用户登录后,我们可以在cookie中存储一个token,以便在后续请求中验证用户的身份。 session是存储在服务器端的数据结构,可以用来保存一些用户状态信息。例如,当用户登录后,我们可以在session中保存用户的ID和用户名等信息。 在Python中,我们可以使用Flask框架提供的sessioncookie功能来实现登陆和注销功能。以下是一个简单的示例: ``` from flask import Flask, request, session, redirect, url_for app = Flask(__name__) app.secret_key = 'secret_key' @app.route('/login', methods=['POST']) def login(): username = request.form.get('username') password = request.form.get('password') # 验证用户名和密码 if username == 'admin' and password == 'admin': session['username'] = username return redirect(url_for('index')) else: return 'login failed' @app.route('/logout') def logout(): session.pop('username', None) return redirect(url_for('index')) @app.route('/') def index(): if 'username' in session: return 'Hello, %s' % session['username'] else: return redirect(url_for('login')) ``` 在这个例子中,我们使用了Flask框架,当用户登录后,我们保存了用户的用户名到session中,当用户注销时,我们从session中删除了用户名。在首页中,我们判断用户是否已经登陆,如果已经登陆,则返回欢迎页面,否则跳转到登录页面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值