web中的cookie管理
本篇是以JSP为背景介绍,但是在web开发中也是相同的原理。
什么是cookie
由于http是一种无状态的协议,因此服务器收到请求后,只会当做一次新的请求。即便你重复发送了1000次同样的请求,这1000次都属于独立的请求。
这样显然效率很低,如果要登录某个网站,后期的操作都与用户身份有关,难道还得没操作一个页面都得登录一次?
于是cookie和session就诞生了。
cookie和session都是用于帮助http进行状态管理的一种手段。
cookie与session的区别
cookie与session的区别可以通过下面几点区分:
1 保存位置:cookie保存在客户端浏览器中;session保存在服务器端。
2 生命周期:cookie由用户指定或者使用默认的过期时间,在这段期限内cookie都保存在客户端本地;session属于一次会话,如果会话关闭,浏览器关闭,服务器启动都会导致session的清除。
3 数据类型:cookie其实就是一堆字符串;session是某种Object对象。
4 安全性:cookie一般只保存一些用户的行为习惯等等,像用户名密码肯定都需要经过加密的,即使泄露了也无关紧要;session则保存用户相关的重要内容。
cookie的使用过程
如果要保存cookie:
首先需要创建一个Cookie对象,然后通过把它添加到response对象中,返回给客户端即可。
Cookie对象中的数据就自动保存在客户端了。
如果要使用cookie:
可以通过request对象直接查询cookie信息,并且比对是否含有自己使用的数据。
Cookie中常用的方法
1 创建Cookie对象
Cookie usernameCookie = new Cookie("username",username);
2 设置过期时间,以秒为单位
usernameCookie.setMaxAge(864000);
3 保存cookie
response.addCookie(usernameCookie);
4 获取cookie数据
Cookie[] cookies = request.getCookies();
5 提取关键数据
Cookie[] cookies = request.getCookies();
if(cookies!=null && cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals("username")){
response.addCookie(c);
}
}
}
JSP中cookie使用样例
业务场景:
1 login.jsp登录用户名密码,可以设置是否记录cookie;如果之前登陆过,则自动填写cookie中的信息。
2 跳转到doLogin.jsp界面,进行cookie的保存于清除。如果前一页设置保存,则保存cookie信息;如果前一页设置不保存,则清除信息。
3 通过URL跳转到users.jsp页面,可以提取cookie中的相关信息。
login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
import="java.net.*"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<hr>
<%
request.setCharacterEncoding("utf-8");
String username = "";
String password = ""; Cookie[] cookies = request.getCookies();
if(cookies!=null && cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals("username")){
username = URLDecoder.decode(c.getValue(),"utf-8");
}
if(c.getName().equals("password")){
password = URLDecoder.decode(c.getValue(),"utf-8");
}
}
}
%>
<form name="loginForm" action="doLogin.jsp" method="post">
<table>
<tr>
<td>username</td>
<td><input type="text" name="username" value=<%=username%>></input></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="password" value=<%=password%>></input></td>
</tr>
<tr>
<td>
<input type="checkbox" name="isUseCookie" checked="true"/>记住登录状态
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="submit"/></td>
</tr>
</table>
</form>
</body>
</html>
doLogin.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
import="java.net.*"
pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登录</title>
</head>
<body>
<h1>javaBeans</h1>
<hr>
<%
//保证request以及response的编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); String[] isUseCookies = request.getParameterValues("isUseCookie");
if(isUseCookies!=null && isUseCookies.length>0 ){
//使用URLEncoder解决cookie中中文问题
String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
String password = URLEncoder.encode(request.getParameter("password"),"utf-8"); Cookie usernameCookie = new Cookie("username",username);
Cookie passwordCookie = new Cookie("password",password);
usernameCookie.setMaxAge(864000);
passwordCookie.setMaxAge(864000); response.addCookie(usernameCookie);
response.addCookie(passwordCookie);
}else{
Cookie[] cookies = request.getCookies();
if(cookies!=null && cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals("username")||c.getName().equals("password")){
c.setMaxAge(0);
response.addCookie(c);
}
}
}
}
%>
<a href="users.jsp" target="_blank">check user info</a>
</body>
</html>
users.jsp
<%@ page language="java" import="java.util.*,java.io.*,java.net.*" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<h1>cookie</h1>
<%
request.setCharacterEncoding("utf-8"); String username = "";
String password = ""; Cookie[] cookies = request.getCookies();
if(cookies!=null && cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals("username")){
username = URLDecoder.decode(c.getValue(),"utf-8");
}
if(c.getName().equals("password")){
password = URLDecoder.decode(c.getValue(),"utf-8");
}
}
}
%>
用戶名:<%=username %>
密碼:<%=password %>
</body>
</html>
其中关于编码问题,可以参考:中文乱码问题
web中的cookie管理的更多相关文章
- JMeter 中 HTTP Cookie 管理器的使用
根据 web 应用的复杂度你可以选择创建两种类型的 JMeter 测试计划:面向点击数的或面向场景的. 创建一个面向点击数的测试计划你需要有中值统计.这些统计要包含你的应用每秒应该处理多少个独立请求的 ...
- JMeter中HTTP Cookie 管理器使用
案例: 在一次做公司OA系统的时候,发现录制脚本无法回放成功,通过定位,是因为登录的过程中存在重定向,导致登录接口的状态没有自动带入重定向页面 解决方法: 加入HTTP Cookie 管理器使用 现象 ...
- WEB中的cookie
首先来一篇好文章,刚好看到的: 沉默中的狂怒 —— Cookie 大喷发---------------- http://www.cnblogs.com/index-html/p/mitm-cookie ...
- 『政善治』Postman工具 — 10、Postman中对Cookie的操作
目录 1.往常的Cookie处理方式 2.Postman中的Cookie管理机制 3.自定义Cookie管理内容 在接口测试中,某些接口的调用,需要带入已有Cookie,比如有些接口需要登陆后才能访问 ...
- Jmeter4.0----HTTP Cookie管理器_抓取cookie中的参数(13)
1.说明 请求结束后,要通过登录用户的JSESSIONID判断用户是否登录成功 2.步骤 第一步:添加 HTTP Cookie管理器 录制前,创建”线程组”,线程组=>配置元件=>HTTP ...
- web中cookie和session_转
转自:Python爬虫番外篇之Cookie和Session python修行路 关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可 ...
- Java Web servlet中的cookie
点击submit后: 点击查看Cookies: 在C:\Documents and Settings\Administrator\Cookies目录下面会有一个 hongten@webproj ...
- Eclipse中发布Maven管理的Web项目时找不到类的问题根源和解决办法(转)
转自:http://blog.csdn.net/lvguanming/article/details/37812579?locationNum=12 写在前面的话 现在是越来越太原讨厌Eclipse这 ...
- 在web中使用shiro(会话管理,登出,shiro标签库的使用)
在shiro的主配置文件中配置,登出的请求经过的过滤器就可以了,在shiro的过滤器中有一个名称为logout的过滤 器专门为我们处理登出请求: 一.shiro会话管理器 shiro中也提供了类似于w ...
随机推荐
- QQ互联 网站应用接入
1.准备工作 接入qq登陆前,网站需要先进行申请,获得对应的appid和appkey, 以保证后续流程中可正确对网站与用户进行授权. 2.放置qq登陆按钮. 在网站页面上放置“qq登录”按钮,并为按钮 ...
- [转] Ubuntu安装Fcitx以及Fcitx输入中文不显示候选词框的解决办法
[From] http://blog.csdn.net/qq_21397217/article/details/52447263 1. 安装Fcitx所需组件 $ sudo apt install f ...
- drf之视图案例
views.py from django.shortcuts import render # Create your views here. from rest_framework.generics ...
- java se系列(三) 顺序语句、if...else、switch、While、do-while、for、break、continue
1 顺序语句 语句:使用分号分隔的代码称作为一个语句. 注意:没有写任何代码只是一个分号的时候,也是一条语句,称作空语句. 顺序语句就是按照从上往下的顺序执行的语句. 2 判断(if…else) 什么 ...
- java se系列(二) 关键字、注释、常量、进制转换、变量、数据类型转换、运算符
1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. 1.2 常见的关键字 备注 ...
- android主线程ActivityThread
ActivityThread在Android中它就代表了Android的主线程,但是并不是一个Thread类. 源码如下: http://androidxref.com/6.0.0_r1/xref/f ...
- python-OS.path.join()路径拼接
os.path.join()函数: 第一个以”/”开头的参数开始拼接,之前的参数全部丢弃. 以上一种情况为先.在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼 ...
- Java入门系列-08-选择结构
这篇文章为你搞懂2个问题 if-else选择结构的使用? switch 的使用? 前面我们学习的代码都是直上直下的执行,还不会"拐弯",这篇文章带大家来看一下会"拐弯&q ...
- [转]Using NLog for ASP.NET Core to write custom information to the database
本文转自:https://github.com/NLog/NLog/issues/1366 In the previous versions of NLog it was easily possibl ...
- [转]ASP.NET Core / MVC 6 HttpContext.Current
本文转自:http://www.spaprogrammer.com/2015/07/mvc-6-httpcontextcurrent.html As you know with MVC 6, Http ...