cookie的简单的使用和介绍方式

什么是cookie

cookie是最常用的跟踪用户会话的方式。他是有服务器端生成的并发送给客户端浏览器的,浏览器会将其保存为某个目录下的文本文件。
当用户在浏览网站的时候,web服务器会将一些资料存放在客户端,这些资料包括用户在浏览器网站期间输入的文字或是一些选择记录。当用户下一次访问网站的时候,服务器端会先从客户端查看是否有保留下来的cookie信息,然后根据cookie内容呈现特定的页面内容给客户。cookie最典型的就是判定注册用户是否已经登录网站,用户可能会得到提示,是否保存状态以便再下一次进入系统时可以简化登录。另外cookie还会应用到最近浏览过的商品之类的业务处理中,用户在购物网站中浏览过不同的商品信息,都可以使用cookie进行保存方便用户快速定位到已浏览过的商品。
总结:cookie的作用主要表现在以下方面。
对特定对象的追踪,如访问者的访问次数,最后的访问时间,路径等。
统计网页浏览次数。
在cookie有效期内,记录用户登录信息。
实现各种个性化服务,如针对不同喜好的用户以不同的风格进行展示。

在JSP中使用cookie

1.创建cookie对象

Cookie newCookie=new Cookie(String name,String value);

解释:cookie类在javax.servlet.http包中,当jsp翻译成.java文件时,会自动导入javax.servlet.http包下的所有类。在jsp中,通过调用构造方法Cookie(String name,String value)创建新的cookie对象,其中:
name :用于代表cookie的名称。
value:用于表示改名称所对应的值。
2.写入cookie对象
我们知道response的常用的方法有一个addCookie()方法,在创建对象后,就使用response对象的addcookie方法实现写入cookie。
response.addCookie(newCookie);
cookie对象的方法有很多比如》

名称说明
void setMaxAge(int expiry)设置cookie的有效期,以秒为单位
void setValue(String value)cookie创建之后,为cookie进行赋值
String getName()获取cookie的名称
String getValue()获取cookie的值
int getMaxAge()获取cookie的有效时间,以秒为单位

示例 在addCookie.jsp中添加cookie。

        	
<%
	response.addCookie(new Cookie("username","jake"));
	response.addCookie(new Cookie("password","1234"));
	response.sendRedirect("getCookies.jsp");
	
%>

3.读取cookie
我们在读取cookie的时候就需要使用requset的getCookies()方法,该方法将返回HTTP请求中的cookie对象数组,因此必须通过遍历的方式进行访问。
cookie时通过name、value的方法进行保存的,因此我们在遍历数组的时候我们要使用getName方法和getValue方法。
getCookies.jsp

<%
	Cookie[] cookies = request.getCookies();
    String user = "";
    String pwd = "";
    if(cookies != null){
    	for(int i=0; i<cookies.length; i++){
    		if(cookies[i].getName().equals("username")){
    			user = cookies[i].getValue();
    		}else if(cookies[i].getName().equals("password")){
    			pwd = cookies[i].getValue();
    		}
    	}
    }

	out.print("用户名:"+user+"密码:"+pwd);
%>

结果:

用户名:jake密码:1234

学会了cookie的存取值,下面进行验证sessionid是否已cookie的形式存储在客户端。首先通过访问jsp页面创建会话,然后从cookie中读取sessionid,比较与通过session对象的getid()方法取得的sessionid是否一样。
在create.jsp中

	session.setAttribute("test", "hello");
	response.sendRedirect("tow.jsp");
<%
out.print("sessionid" + session.getId());
out.print("<br/>");

	Cookie[] cookies = request.getCookies();
   
    if(cookies != null){
    	for(int i=0; i<cookies.length; i++){
    		out.print("cookie name:" + cookies[i].getName());
    		out.print("<br/>");
    		out.print("cookie value:" + cookies[i].getValue());
    		out.print("<br/>");
    	}
    }	
%>

结果:

sessionid11D5E5F5B8ABAAC8EEDC4CC1DF83B48B
cookie name:JSESSIONID
cookie value:11D5E5F5B8ABAAC8EEDC4CC1DF83B48B

可以看到cookie的值与sessionid的值时一致的,这也说明sessionid 被保存在cookie中了。

问题:
提问:如果我们在创建页面的时候不是使用response对象而是使用的getRequsetDispatch().forward(requset,respon)方法进行访问为何看不到cookie中的JSESSIONID?
回答:因为使用response对象的sendRedirect()方法是将页面进行重定向到一个新的地址,在请求getCookie.jsp之前,服务器已经对上一个请求作出了响应,在客户端写入了cookie。如果使用转发,到达getCookie.jsp前并没有返回响应,因为在客户端没有写入cookie。这时,只要通过浏览器再次访问getCookie.jsp页面(直接输入url),即可看到上次响应写入的cookie。

cookie与session作用域的对比

目前知道两张保存数据的信息一种是cookie一种是session,总结一下区别。

session作用域是在服务器端保存用户信息,cookie是在客户端保存用户信息。
session作用域中保存的数据是Objiect类型,cookie保存的值是String类型。
session作用域随会话的结束而将数据进行销毁,cookie可以长期保存在客户端。
cookie通常用于保存不重要的信息,重要的信息使用session进行保存。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值