Cookie与Session总结

本文详细介绍了Cookie和Session的工作原理、使用方法以及在JavaWeb中的应用,包括Cookie的创建、修改、读取和删除,Session的机制、使用及购物车功能的实现。并提醒了Cookie的存储限制和安全注意事项。
摘要由CSDN通过智能技术生成

本篇文章主要是作者学习Cookie和Session的一些记录,希望能帮到您,如果有什么不妥当的地方希望得到指出,谢谢阅读
Java学习大纲:https://blog.csdn.net/weixin_39778570/article/details/94667501
JavaWeb:https://blog.csdn.net/weixin_39778570/article/details/97800485

Cookie对象详解

Cookie是服务器发送给浏览器的体积很小(不超过4KB)的纯文本信息,用户以后访问同一个Web服务器时浏览器会把它们原样发送给服务器。cookie一般用于在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入名字和密码、门户网站的主页定制、有针对性地投放广告等等。 Servlet中可以同时创建多个cookie,但是每个站点最多只能保存20个cookie。
原理
在这里插入图片描述

  1. 服务器脚本向浏览器发送一组 Cookies。例如:姓名、年龄或识别号码等。
  2. 浏览器将这些信息存储在本地计算机上,以备将来使用。
  3. 当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookies 信息发送到服务器,服务器将使用这些信息来识别用户。

小结

  1. Cookie的目的就是为用户带来方便,为网站带来增值。虽然有着许多误传,事实上Cookie并不会造成严重的安全威胁。Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统。另外,由于浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4 KB,因此Cookie不会塞满你的硬盘,更不会被用作“拒绝服务”攻击手段。

  2. Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了。

  3. Servlet先要调用new Cookie(name,value)用合适的名字和值创建一个或多个Cookie,通过cookie.setXXX设置各种属性,通过response.addCookie(cookie)把cookie加入应答头。

  4. Servlet从客户端读入Cookie,应该调用request.getCookies(),getCookies()方法返回一个Cookie对象的数组。在大多数情况下,你只需要用循环访问该数组的各个元素寻找指定名字的Cookie,然后对该Cookie调用getValue方法取得与指定名字关联的值。

Cookie使用方法

先来看看Cookie源码…

public class Cookie implements Cloneable, Serializable {
   
    private static final CookieNameValidator validation;
    private static final long serialVersionUID = 1L;
    private final String name;
    private String value;
    private int version = 0;
    private String comment;
    private String domain;
    private int maxAge = -1;
    private String path;
    private boolean secure;
    private boolean httpOnly;

    public Cookie(String name, String value) {
   
        validation.validate(name);
        this.name = name;
        this.value = value;
    }
    /*省略get和set方法*/
}
package javax.servlet;

/**
 * Configures the session cookies used by the web application associated with
 * the ServletContext from which this SessionCookieConfig was obtained.
 *
 * @since Servlet 3.0
 */
public interface SessionCookieConfig {
   
	// 该方法返回 cookie 的名称。名称在创建后不能改变。
    public void setName(String name);
    public String getName();
    // 该方法设置 cookie 适用的域
    public void setDomain(String domain);
    // 该方法获取 cookie 适用的域
    public String getDomain();
    // 该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
    public void setPath(String path);
    // 该方法获取 cookie 适用的路径。
    public String getPath();
    // 该方法规定了描述 cookie 目的的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
    public void setComment(String comment);
    // 该方法返回了描述 cookie 目的的注释,如果 cookie 没有注释则返回 null。
    public String getComment();
    // Sets the httpOnly flag for the session cookie.
    public void setHttpOnly(boolean httpOnly);
    // 是否为只为http使用
    public boolean isHttpOnly();
    // 该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。
    public void setSecure(boolean secure);
    public boolean isSecure();
    // 该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
    public void setMaxAge(int MaxAge);
    // 该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。
    public int getMaxAge();
}

添加Cookie

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
   
    response.setContentType("text/html;charset=utf-8");
    String id = UUID.randomUUID().toString(); //生成一个随机字符串
    Cookie cookie = new Cookie("id", id); //创建Cookie对象,指定名字和值
    response.addCookie(cookie); //在响应中添加Cookie对象
    response.getWriter().print("已经给你发送了ID");
}

修改Cookie

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
   
    // 所有的 cookie
    Cookie[] cookies = request.getCookies();
    // 遍历所有的 Cookie 寻找 用户帐号信息与登录次数信息
    for (int i = 0; cookies != null && i < cookies.length; i++) {
   
        Cookie cookie = cookies[i];
        if ("visitTimes".equals(cookie.getName())) {
   
            visitTimes = Integer.parseInt(cookie.getValue(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值