在网站开发中经常要用到cookie来存放一些用户信息,比如登录密码,购物列表啊等等
接下来简要剖析一下cookie
Cookies有以下几个特点:
1、只能是文本内容,而且长度不得大于4KB
2、客户端可以阻止cookie的写入,故而用cookie来实现功能存在一些不稳定因素
3、子路径设置的cookie,父路径不能读取,相反父路径设置的cookie,子路径可以读取。这一点十分重要,也比较容易犯错误。
接下来手动创建几个cookies:
package cookies; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Setcookies extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("GBK"); resp.setContentType("text/html;charset=GBK"); for (int i = 0; i < 3; i++) { // 生成3个临时cookies,该cookie存放在内存中,一旦浏览器被关闭则被自动清除 Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i); // 将cookie放入应答消息中,返回给客户端,临时cookie就存放于客户端内存 resp.addCookie(cookie); // 生成3个有生命周期的cookie,存放于文本中(ie浏览器的cookie文本中),即使浏览器关闭也不会消失 cookie = new Cookie("Persisten-Cookie-" + i, "Cookie-Value-P" + i); // setMaxAge(int t)设置一个生命周期,t为其值,以秒为单位 cookie.setMaxAge(3600); // 将cookie放入应答消息中,返回给客户端,有生命周期的cookie就存放于客户端文本中 resp.addCookie(cookie); } // 启用一个输出流,将内容输出到页面上 PrintWriter out = resp.getWriter(); out .println("<html><head>" + "<meta http-equiv=\"content-type\" content=\"text/html; charset=gbk\">" + "<title>生成cookie</title>" + "</head>" + "<body><a href=\"Showcookies\">查看cookie</a>" + "</body></html>"); // 记得关闭输出流,节省开销 out.close(); } // 重写doPost方法,让其调用doGet方法 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
上面通过Setcookies产生6个cookies,接下来获取这6个cookies并且显示在页面上:
package cookies; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Showcookies extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置编码方式 req.setCharacterEncoding("gbk"); resp.setContentType("text/html;charset=gbk"); // 用一个html表格来显示我们得到的cookie数据 String title = "Active Cookies"; PrintWriter out = resp.getWriter(); out .println("<html><head><title>" + "参数客户端Cookie" + "</title>" + "<meta http-equiv=\"content-type\" content=\"text/html; charset=gbk\">" + "</head>" + "<body bgcolor=\"#fdf5e6\">" +"<center>" + "<h1 align=\"center\">" + title + "</h1>\n" + "<table border=1 algin=\"center\">\n" + "<tr bgcolor=\"#ffad0o\">\n" + "<th>Cookie Name\n" + "<th>Cookie Value"); // 从客户端的请求中取本网站的cookie信息,此时http为连接状态 Cookie[] cookies = req.getCookies(); // 得到cookie信息,输出到页面上 if (cookies != null) { Cookie cookie; for (int i = 0; i < cookies.length; i++) { cookie = cookies[i]; out.println("<tr>\n" + "<td>" + cookie.getName() + "</td>\n" + "<td>" + cookie.getValue() + "</td>\n"); } out.println("</table><center></body></html>"); out.close(); } } }
xml配置文档:
<servlet> <servlet-name>Setcookies</servlet-name> <servlet-class>cookies.Setcookies</servlet-class> </servlet> <servlet-mapping> <servlet-name>Setcookies</servlet-name> <url-pattern>/Setcookies</url-pattern> </servlet-mapping> <servlet> <servlet-name>Showcookies</servlet-name> <servlet-class>cookies.Showcookies</servlet-class> </servlet> <servlet-mapping> <servlet-name>Showcookies</servlet-name> <url-pattern>/Showcookies</url-pattern> </servlet-mapping>
先启动Setcookies创建6个cookies,再启动Showcookies,成功显示了创建的6个cookies,其中最后一项应该是浏览器默认生成的,于我们的操作无关。
接下来解释:子路径设置的cookie,父路径不能读取,相反父路径设置的cookie,子路径可以读取。
修改xml配置文件如下:
<servlet> <servlet-name>Setcookies</servlet-name> <servlet-class>cookies.Setcookies</servlet-class> </servlet> <servlet-mapping> <servlet-name>Setcookies</servlet-name> <url-pattern>/Setcookies</url-pattern> </servlet-mapping> <servlet> <servlet-name>Showcookies</servlet-name> <servlet-class>cookies.Showcookies</servlet-class> </servlet> <servlet-mapping> <servlet-name>Showcookies</servlet-name> <url-pattern>/test/Showcookies</url-pattern> </servlet-mapping>
现在,Showcookies成为了url下的test子路径了,而Setcookies此时是一个父路径。执行程序,成功获取cookies信息。
继续更改xml文件:
<servlet> <servlet-name>Setcookies</servlet-name> <servlet-class>cookies.Setcookies</servlet-class> </servlet> <servlet-mapping> <servlet-name>Setcookies</servlet-name> <url-pattern>/test/Setcookies</url-pattern> </servlet-mapping> <servlet> <servlet-name>Showcookies</servlet-name> <servlet-class>cookies.Showcookies</servlet-class> </servlet> <servlet-mapping> <servlet-name>Showcookies</servlet-name> <url-pattern>/Showcookies</url-pattern> </servlet-mapping>
现在Setcookies成了URL的子路径test下的servlet,而Showcookies为父路径,执行Showcookies此时已经无法获取cookies信息了。
相关推荐
Extjs 关于cookie 实现实时存储 数据存储的操作, 将数据存放cookie中,防止断电
cookie购物车cookie购物车cookie购物车cookie购物车cookie购物车cookie购物车cookie购物车cookie购物车cookie购物车cookie购物车cookie购物车cookie购物车
cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie cookie
FlashCookie 不被浏览器清除的Cookie 不被浏览器清空的Cookie
完整获取webBrowser1的Cookie HttpOnly的Cookie
史上最全如何安全的处理cookie,不让cookie被利用最全如何安全的处理cookie,
$.cookie('the_cookie'); // 获得cookie $.cookie('the_cookie', 'the_value'); // 设置cookie $.cookie('the_cookie', 'the_value', { expires: 7 }); //设置带时间的cookie $.cookie('the_cookie', '', { expires:...
C#操作cookie,解密加密cookie
一、属性说明: 1 secure属性 ...也就是说两个属性,并不能解决cookie在本机出现的信息泄漏的问题(FireFox的插件FireBug能直接看到cookie的相关信息)。 二、实例 项目架构环境:jsp+servlet+applet
php session cookie cookie应用 PHP 关于cookie的应该 cookie与session的区别
cookie读写工具类,子cookie读写工具类
jQuery操作cookie的插件,大概的使用方法如下$.cookie('the_cookie'); //读取Cookie值$.cookie(’the_cookie’, ‘the_value’); //设置cookie的值$.cookie(’the_cookie’, ‘the_value’, {expires ‘/’, domain ...
Cookie cookieUserName = new Cookie("userName", userName); cookieUserName.setMaxAge(60); //Cookie保存时间 //创建用户密码Cookie对象 Cookie cookiePassword = new Cookie("password", password); ...
说起来,Cookie应该是一种应用较久的技术了。早在HTML刚刚出现的时候,在每个独立的页面之间没有办法记录和 标识不同的用户。后来人们就发明了Cookie技术,当用户访问网页时,它能够在访问者的机器上创立一个文件,...
jquery 设置cookie、删除cookie、获取cookie
支持多种导出格式,其导出的cookie支持在curl中使用(导出格式选择Netscape HTTP Cookie File)。
//如果不设置失效时间,Cookie信息不会写到用户硬盘,浏览器关闭将会丢弃。 创建Cookie方法 (2) HttpCookie aCookie = new HttpCookie(“lastVisit”); //上一次访问时间 aCookie.Value = DateTime.Now.ToString(); ...
cookie 浏览器 邮箱cookie浏览器 使用cookie进行网页登陆绕过 或者邮箱免登录
关于document.cookie的使用
Cookies的处理 作用 ...如果在请求的过程中产生了cookie,如果该请求使用session发起的,则cookie会被自动存储到session中. 案例 爬取雪球网中的新闻资讯数据:https://xueqiu.com/ #获取一个sessi