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>

  其中关于编码问题,可以参考:中文乱码问题

本文转自博客园xingoo的博客,原文链接:web中的cookie管理,如需转载请自行联系原博主。
相关文章
|
2月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
97 4
|
7月前
|
前端开发 JavaScript Java
计算机Java项目|基于Web的足球青训俱乐部管理后台系统的设计与开发
计算机Java项目|基于Web的足球青训俱乐部管理后台系统的设计与开发
|
8月前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
102 2
|
8月前
|
SQL Java
20:基于EL与JSTL的产品管理页-Java Web
20:基于EL与JSTL的产品管理页-Java Web
68 5
|
8月前
|
存储 Web App开发 安全
Cookie和session 及Web相关工具
Cookie和session 及Web相关工具
|
8月前
|
存储 搜索推荐 安全
Cookie 探秘:了解 Web 浏览器中的小甜饼
Cookie 探秘:了解 Web 浏览器中的小甜饼
|
5月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
92 1
|
5月前
|
存储 安全 搜索推荐
深入探讨Session和Cookie的概念、用途以及如何在Java Web开发中有效地使用它们进行用户状态管理。
在Java Web开发中,Session和Cookie是管理用户状态的核心技术。Session存储于服务器端,通过唯一的Session ID识别用户,确保数据安全与隐私;Cookie则存储于客户端,用于记录用户偏好等信息。两者各有优势:Session适合存储敏感数据,但需合理管理避免资源浪费;Cookie便于持久化存储,但在安全性上需谨慎设置。开发者可通过Servlet API轻松操作二者,实现个性化用户体验与应用性能优化。
86 2
|
5月前
|
存储 JSON JavaScript
震撼!Cookie、Session、Token、JWT 终极对决:揭开 Web 认证的神秘面纱!
【8月更文挑战第13天】Web 开发中,Cookie、Session、Token 和 JWT 常混淆。Cookie 是服务器给客户端的小信息片,如登录状态,每次请求都会返回。Session 则是服务器存储的用户数据,通过 Session ID 追踪。Token 类似通行证,证明客户端身份且可加密。JWT 是结构化的 Token,含头部、载荷及签名,确保数据完整性和安全性。
86 4
|
5月前
|
存储 前端开发 JavaScript
揭秘!JavaScript本地存储的四大绝技:从Cookie到IndexedDB,让你的Web应用秒变数据存储高手,轻松应对各种挑战!
【8月更文挑战第4天】JavaScript为核心前端技术,提供多样本地存储方案以优化用户体验与减少服务器负载。首先,Cookie虽用于基本数据如登录状态,但受大小限制及安全性影响。接着,Web Storage中的LocalStorage持久存储不变数据,SessionStorage则限于单次会话。更进一步,IndexedDB作为全面数据库解决方案,支持复杂数据操作但使用较复杂。每种方式根据应用需求各有优势。
93 9