`
gaozzsoft
  • 浏览: 413274 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

JAVA中cookie的用法研究

阅读更多

JAVA中cookie用法

 

** 处理cookies

类型 方法名 方法解释
String getComment() 返回cookie中注释,如果没有注释的话将返回空值.
String getDomain() 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com)
int getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。
String getName() 返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。
String getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。
boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。
String getValue() 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。
int getVersion() 返回Cookie所遵从的协议版本。
void setComment(String purpose) 设置cookie中注释。
void setDomain(String pattern) 设置cookie中Cookie适用的域名
void setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。
void setPath(String uri) 指定Cookie适用的路径。
void setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。
void setValue(String newValue) cookie创建后设置一个新的值。
void setVersion(int v) 设置Cookie所遵从的协议版本。

注意:cookies在网站浏览者的计算机中是以"名字/值"(name/value)对存储的,其中name和value在Cookies的构造函数中指定,每个name/value对都以name为标识,也就是说加入cookies的每个name/value对中的name不能相同(即便你value不同),否则后则会把前者覆盖掉。

 

在jsp中怎么使用Cookie?

一般来说有两种办法,在JSP中使用Java的嵌入脚本.
例如:
写入Cookie
<html>
<head>........(中间略)
</head>
<body>
<%
String cookieName="Sender";
Cookie cookie=new Cookie(cookieName, "Test_Content");
cookie.setMaxAge(10);
response.addCookie(cookie);
%>
........(其他内容)
</body>
</html>
这样我们就设置了一个Cookie.
仔细研究一下这段代码:
Cookie cookie=new Cookie(cookieName, "Test_Content");
这一行建立了一个Cookie对象,初始化有两个参数,第一个参数cookieName定义了Cookie的名字,后一个参数,也是一个字符串,定义了Cookie的内容。也就是我们希望网页在用户的机器上标识的文件内容。
接下来一行:cookie.setMaxAge(10),调用了Cookie中的setMaxAge方法,设定Cookie在用户机器硬盘上的存活期为10秒。一个Cookie在用户的硬盘里面存在的时间并不是无限期的,在建立Cookie对象的时候,我们必须制定Cookie的存活期,超过了这个存活期后,Cookie文件就不再起作用,会被用户的浏览器自行删除。如果我们希望用户在下次访问这个页面的时候,Cookie文件仍然有效而且可以被网页读出来的话,我们可以将Cookie的存活期设得稍微长一些。比如cookie.setMaxAge(365*24*60*60)可以让Cookie文件在一年内有效。

读出Cookie
Cookie文件创建好后,自然还需要我们把它读出来,否则我们不是白费力气吗?接下来我们看看如何读出在用户硬盘上的Cookie。
<html>
<head>........(中间略)
</head>
<body>
<table border=1>
<tr><td>Name</td><td>value</td></tr>
<%
Cookie cookies[]=request.getCookies();
Cookie sCookie=null;
String svalue=null;
String sname=null;
for(int i=0;i<cookies.length;i++)
{
sCookie=cookies[i];
svalue=sCookie.getValue();
sname=sCookie.getName();
%>
<tr><td><%=name%></td><td><%=svalue%></td></tr>
<%
}
%>
</table>
........(其他内容)
</body>
</html>
这一小段JSP文件可以读出用户硬盘上的所有有效的Cookie,也就是仍然在存活期内的Cookie文件。并用表格的形式列出每个Cookie的名字和内容。
我们来逐行分析一下这段代码:
Cookie cookies[]=request.getCookies() 我们用request.getCookies()读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面。
接下来我们用一个循环语句遍历刚才建立的Cookie对象数组,我们用sCookie=cookies[i]取出数组中的一个Cookie对象,然后我们用sCookie.getValue()和sCookie.getName()两个方法来取得这个Cookie的名字和内容。
通过将取出来的Cookie的名字和内容放在字符串变量中,我们就能对其进行各种操作了。在上面的例子里,可通过循环语句的遍历,将所有Cookie放在一张表格中进行显示。

通过上面两个简单的例子,可以看到,用JSP进行Cookie的操作,是非常简单的。不过我们在实际操作中还要注意一些问题:
1. Cookie的兼容性问题
Cookie的格式有2个不同的版本,第一个版本,我们称为Cookie Version 0,是最初由Netscape公司制定的,也被几乎所有的浏览器支持。而较新的版本,Cookie Version 1,则是根据RFC 2109文档制定的。为了确保兼容性,JAVA规定,前面所提到的涉及Cookie的操作都是针对旧版本的Cookie进行的。而新版本的Cookie目前还不被Javax.servlet.http.Cookie包所支持。
2. Cookie的内容
同样的Cookie的内容的字符限制针对不同的Cookie版本也有不同。在Cookie Version 0中,某些特殊的字符,例如:空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号都不能作为Cookie的内容。这也就是为什么我们在例子中设定Cookie的内容为“Test_Content”的原因。
虽然在Cookie Version 1规定中放宽了限制,可以使用这些字符,但是考虑到新版本的Cookie规范目前仍然没有为所有的浏览器所支持,因而为保险起见,我们应该在Cookie的内容中尽量避免使用这些字符。

另一种方法是用Javascript脚本来操作Cookie

两种方法操作Cookie的具体方法可以这样查到:
在baidu中搜索关键字:JSP Cookie或是Javascript Cookie即可看到你想要的信息.

 

jsp使用cookie实现记住密码的功能

 

jsp使用cookie实现记住密码的功能,代码怎么写的。这个问题困扰我很长时间了,请高手帮帮我。在登陆界面,如果用户点击记住密码复选框,在下次打开登录界面时候用户名和密码不用输入,已经在文本框中!请高手一定要帮帮我,我真的很急。先谢谢大家了!

 

1.       这个一个页面模拟的cookie,如果你要实现登录,当用户输入用户名密码时,到控制层用
Cookie user = new Cookie("user",name+"-"+passward);
加到cookie中,然后在访问此登录页面时,就先调用
Cookie[] cookies=request.getCookies(); 看cookie中是否有user这个值,如果有就取得用户名、密码。
代码示例:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String name="nihao";
String passward="nihao";
try{
Cookie user = new Cookie("user",name+"-"+passward);
user.setMaxAge(60);
response.addCookie(user);
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("user")){
name=cookies[i].getValue().split("-")[0];
passward=cookies[i].getValue().split("-")[1];
request.setAttribute("name",name);
request.setAttribute("pass",passward);
}
}
}
}catch(Exception e){
e.printStackTrace();
}

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<form action="test10.jsp" method="post">
<input type="text" value="${name}" name=name /></br>
<input type="text" value="${pass}" name=pass />
<input type="submit" value="提交">
</form>
</body>
</html>

 

将用户名和密码保存在COOKIE中(JSP)怎么写源代码

保存到cookie
Cookie cookie=new Cookie("name","value");
Cookie cookiep=new Cookie("mima",pass);
cookie.setMaxAge(10*60); //设置过期之前的最长时间
cookiep.setMaxAge(10*60);
response.addCookie(cookie);
response.addCookie(cookiep);
读取cookie
Cookie Cookies[]=request.getCookies();
if(Cookies==null)
out.print("还没有cookie值");
else
{
for(int i=0;i < Cookies.length;i++)
out.print(Cookies[i].getName()+"="+Cookies[i].getValue()+"<br>");
from:http://blog.sina.com.cn/s/blog_6159d51a0100g253.html

 

(二)part two

防止点击后退键 导致的表单重复提交(jsp实现)
2009-10-13 18:40

 

<!-------------index.jsp------------------>

<%@ page language="java" import="" pageEncoding="GBK"%>
<html>
<head>
</head>

<body>
<%
Cookie cookies = new Cookie("c","123");
session.setAttribute("s","123");
response.addCookie(cookies);
   %>
    <form action="second.jsp" method="post">
    <input type="text" name="name">
    <input type="submit">
    </form>
</body>
</html>

<!--------------------------second.jsp------------------------>

<%@ page language="java" import="" pageEncoding="GBK"%>

<html>
<body>
<%
    String name=""; //定义接收的变量
    Cookie[] cookies = request.getCookies(); //获得cookie
    String comp1=""; //定义变量 被cookie赋值
    String comp2=""; //定义变量 被session赋值
    comp2=session.getAttribute("s").toString(); //得到session的值
    if(cookies!=null){  
        for (int i = 0; i < cookies.length; i++) {
          Cookie c = cookies[i];
          if(c.getName().equalsIgnoreCase("c")){ //得到cookie的值
            comp1=c.getValue();
            }
        }
    }
    if(comp1.equals(comp2)){ //如果两个值一致,那么改变session中的值,并正常打开页面
     session.setAttribute("s","456");
     name=request.getParameter("name");
      }else{//如果两个值不一致,跳转到失败页面
       response.sendRedirect("error.jsp");
      }
%>
<%=name%> <!-- 显示获取的值 -->
</body>
</html>
<!----------------------------------------error.jsp--------------------------------------->

<html>
<head>
</head>
<body bgcolor="gray">
    Wrong!
</body>
</html>

 

分享到:
评论

相关推荐

    JAVA中cookie用法

    使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com) int getMaxAge() 返回Cookie过期...

    java中cookie的使用教程

    java中cookie的使用教程,指导学习cookie。有例子可以学习。

    java 操作cookie

    java 操作cookie精选,基础的操作,简单易学

    python cookie反爬处理的实现

    Cookies的处理 作用 ...如果在请求的过程中产生了cookie,如果该请求使用session发起的,则cookie会被自动存储到session中. 案例 爬取雪球网中的新闻资讯数据:https://xueqiu.com/ #获取一个sessi

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

    主要介绍了java使用Cookie判断用户登录情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java使用默认浏览器打开指定URL的方法(二种方法)

    方法二: 代码如下://判断当前系统是否支持Java AWT Desktop扩展 if(java.awt.Desktop.isDesktopSupported()){ try{ //创建一个URI实例,注意不是URL java.net.URI uri=java.net.URI.create(“//www.j

    Cookie与Session机制

    该文档主要向我们讲解了cookie和seesion的机制以及使用方法

    Cookie的使用

    在Cookie介绍中 我们了解到Cookie是基于Set Cookie响应头和Cookie请求头工作的 服务器通过response对象的addHeader 方法将cookie发送给浏览器 然后浏览器通过Cookie请求头将cookie再送回服务器

    Java Servlet及Cookie的使用

    本文同时给出了通过Java Servlet向用户的硬盘写入和读取Cookie的方法及例程。通过它可以实现网上常见的个性化网页、网上购物篮、密码验证等。  Java Servlet是运行于Web服务器上的Java代码,它可以接受用户请求,...

    java jdk实列宝典 光盘源代码

    java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;...

    cookie和session区别

    这是一份关于cookie和session的知识文档,有关于cookie是什么,图解,cookie对比session有哪些不好,session是什么图解

    cookie和表单实现基本登录并保存信息

    JSP页面内容介绍 index.jsp ...需要导入java.net.*包使用URLEncoder对象 将用户名和密码保存在cookie中,并设置它们的最长生存期限 userCenter.jsp 遍历客户端的cookie,使用URLDecoder解码获取用户信息

    JAVA面试题最全集

    将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时...

    java面试宝典

    42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以...

    Java网络编程(第3版) 中文版

    本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...

    java 面试题 总结

    子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。...

    Java服务器程序设计

    用java进行客户端的applet (小程序)开发的技术已广为使用,而用java进行服务器端的servlet(服务器小程序)开发则尚需揭开其神秘的面纱,本书正是基于这样的目的编写的。全书从java服务器的体系结构、开发工具和...

    Java常见面试题208道.docx

    4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与 String str=new String(“i...

    JAVA网络编程.第3版.哈诺德著.扫描版.含源码

    本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDPsocket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...

    JAVA获取邮件联系人

    方法2:利用httpclient模拟登录邮箱,抓取联系人页面的源代码---------使用http监听工具,抓出 邮箱登录、跳转(action)、联系人页面 等URL、form表单中隐藏的参数、高版本httpclient会自动管理cookie

Global site tag (gtag.js) - Google Analytics