Cookie在Java中的使用

什么是Cookie

在现实生活中,当顾客第一次在超市购物,通常服务员会询问是否办理一张会员卡来积分以便日后折扣等福利活动。会员卡会记录顾客的姓名、积分、消费记录等信息,如果顾客要参与超市的福利活动等都需要提供会员卡,服务员在后台刷卡查询即可知道是哪个用户在使用会员卡。

现在将现实生活中的案例中的角色互换一下。

当用户没有在Web服务器登记过用户信息,而使用网站提供的需登录的服务时,服务器会告知浏览器跳转到登陆页面进行用户信息的登记操作,登录完成之后,浏览器向服务器发起一次登陆请求,服务器将用户的信息存储到Cookie中,并响应给浏览器新的Cookie,浏览器得到Cookie之后将它存储到缓存区。

当用户在Web服务器登记过用户信息,而使用网站提供的需登录的服务时,服务器会通过请求中携带的Cookie判断此次请求时哪个用户,并以这个Cookie的信息去查询数据库等操作,完成用户需要的服务。

Cookie的必要

HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。由于Web服务器要面对很多用户的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息,从而减轻服务器端的负载,同时无状态也减小了HTTP请求的开销。

但是在必要的场景,如登陆、购物等都需要保存用户的状态(信息),就不得不用到Cookie。

Cookie如何工作

第一次访问服务器,没有Cookie,向服务器登记新的Cookie。

第二次及以后访问服务器,有Cookie,无需登记新的Cookie。

模拟用户登录

需求分析:

当用户访问homepage.jsp时,判断请求中是否携带username的Cookie,如果不存在就通知浏览器跳转到登录页面进行用户信息的登记。当用户再次访问homepae.jsp时,不会被拦截,可以让用户访问个人主页页面。

编写代码:

个人主页的Servlet

@WebServlet(name = "homepageServlet", urlPatterns = "/homepage")
public class HomePageServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            if (!cookie.getName().equals("username")) {
                // 如果用户是第一次访问个人主页,就通知浏览器跳转到登陆页面进行登录
                resp.sendRedirect(req.getContextPath() + "/login.jsp");
            }
        }
    }

}

用户登录的Servlet

@WebServlet(name = "loginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取http请求参数username
        String username = request.getParameter("username");
        // 设置响应内容的类型
        response.setContentType("text/html;charset=utf-8");
        // 获取Cookie值
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if (!cookie.getName().equals("username")) { // 用户第一次访问
                Cookie userCookie = new Cookie("username", username);
                userCookie.setMaxAge(300);
                response.addCookie(userCookie);
            }
            response.sendRedirect(request.getContextPath() + "/homepage.jsp");
        }
    }

}

打开浏览器,实验一下:

在第一次访问homepage页面时,看到浏览器缓存区并没有名为username的Cookie,只有当登录之后,浏览器缓存区才有了这个Cookie。

以上就是Cookie在Java中的使用的详细内容,更多关于Cookie的使用的资料请关注我们其它相关文章!

(0)

相关推荐

  • 在java中http请求带cookie的例子

    如下所示: String urlPath = "你的请求链接"; String cookie = "要发送的cookie"; URL url = new URL(urlPath); URLConnection conn = url.openConnection(); conn.setRequestProperty("Cookie", cookie); conn.setDoInput(true); BufferedReader br = new B

  • 如何使用会话Cookie和Java实现JWT身份验证

    HTTP是无状态协议,用于传输数据.它启用了客户端和服务器端>之间的通信.它最初是为了在Web浏览器和Web服务器之间建立连接而建立的.比如在网上购物,我们添加一些商品,例如.耳机到我们的购物车,然后,我们继续寻找其他项目,在此期间,我们希望在执行任何其他任务是存储购物车项目的状态且不丢失它们.这意味着我们希望在整个购物过程中记住我们的状态.由于HTTP是无状态协议,因此要克服问题,我们可以使用会话或者令牌 1.基于会话的身份验证 在JSON Web令牌出现之前,我们主要使用这种身份验证.在这种

  • Java后端Cookie实现(时间戳)代码实例

    我们来简单实现一个cookie. 一.简单介绍 Cookie 是一些数据, 存储于你电脑上的文本文件中. 当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息. Cookie 的作用就是用于解决 "如何记录客户端的用户信息": 当用户访问 web 页面时,他的名字可以记录在 cookie 中. 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录 (博客园cookie界面) 二.简单实现 0.maven引入依赖 servlet和jsp的依

  • Java 模拟cookie登陆简单操作示例

    本文实例讲述了Java 模拟cookie登陆简单操作.分享给大家供大家参考,具体如下: 最近在做将禅道上的功能接口做到手机端,在做登陆的时候,看了禅道的源码,是由cookie来登陆,所以要做一个模拟cookie登陆的接口,将拿到的cookie放到每次接口请求的头部中去,就可以正常访问了. import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; /** * @Author:

  • JavaWeb 中Cookie实现记住密码的功能示例

    本文主要内容: •1.什么是Cookie •2.Cookie带来的好处 •3.Cookie的主要方法 一.什么是Cookie cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段.Cookie的目的就是为用户带来方便,为网站带来增值.虽然有着许多误传,事实上Cookie并不会造成严重的安全威胁.Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统.另外,由于浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为

  • JavaWeb使用Session和Cookie实现登录认证

    后台管理页面往往需要登录才可以进行操作,这时就需要Seession来记录登录状态 要实现起来也是非常简单,只需要自定义一个HandlerInterceptor就行了 自定义的HandlerInterceptor也只有短短几行代码 public class LoginInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpSer

  • Java 对 Cookie增删改查的实现示例

    Cookie属性 name:cookie的名称 value:cookie的值 maxAge:cookie的失效时间,默认为-1 值 说明 负数 浏览器关闭后立即失效 0 马上清除cookie 正数 设置过期时间,单位秒 s path Cookie的有效路径,/ 表示这个路径即该工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie路径和其子路径可以访问. 获取所有Cookie public static Cookie[] GetCookies(HttpServletReque

  • java使用Cookie判断用户登录情况的方法

    本文实例为大家分享了java使用Cookie判断用户登录情况的方法,供大家参考,具体内容如下 1.判断是否登录 public boolean isLogin() { Set<Cookie> cookies = this.browser.getCookies(); String JSESSIONIDID = "JSESSIONID"; String sessionIdID = "sessionId"; String loginID = "logi

  • Java Web学习之Cookie和Session的深入理解

    cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session 机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择 会话cookie和持久cookie的区别 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了.这种生命期为浏览会话期

  • java中Servlet Cookie取不到值原因解决办法

    java中Servlet Cookie取不到值原因解决办法 现象: 在测试带Cookie的HTTP请求时发现,服务端用request.getHeader("cookie")可以去到值; 但是用request.getCookies()却不行 Cookie mycookies[] = request.getCookies(); 中永远获取不到uid的值:(80端口号除外) 原因: 查了浏览器的具体cookie值,发现 http://localhost:8080/ 访问的时候,cookie值

  • servlet之cookie简介_动力节点Java学院整理

    首先来了解什么是"会话".会话是web技术中的一个术语,可以简单的理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,这个过程称为一个会话. 如果在打开一个浏览器访问一个页面后,再打开一个浏览器访问同一个页面,那这就是有两个会话:而打开一个浏览器访问一个页面后,通过这个页面上的某个超链接是从新的浏览器打开的,那依然只算一个会话. 每个用户在使用浏览器与服务器进行会话的过程中,各自不可避免地会产生一些数据,而程序要想办法为每个用户保存这些数据.比如,用户

  • Java接口测试Cookie与token原理解析

    一.Cookie与token机制测试 Cookie与Session token机制 cookie/session机制需要在服务端保存大量的session信息,造成严重负担,而token机制则避免记录大量信息,采用服务器签发的token完成验证. 1.客户端使用用户名跟密码请求登录 2.服务端收到请求,去验证用户名与密码 3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端 4.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local S

随机推荐