本篇文章主要是作者学习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。
原理
- 服务器脚本向浏览器发送一组 Cookies。例如:姓名、年龄或识别号码等。
- 浏览器将这些信息存储在本地计算机上,以备将来使用。
- 当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookies 信息发送到服务器,服务器将使用这些信息来识别用户。
小结
-
Cookie的目的就是为用户带来方便,为网站带来增值。虽然有着许多误传,事实上Cookie并不会造成严重的安全威胁。Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统。另外,由于浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4 KB,因此Cookie不会塞满你的硬盘,更不会被用作“拒绝服务”攻击手段。
-
Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了。
-
Servlet先要调用new Cookie(name,value)用合适的名字和值创建一个或多个Cookie,通过cookie.setXXX设置各种属性,通过response.addCookie(cookie)把cookie加入应答头。
-
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(