Cookie 对象
Cookie 是一种保持 Web应用程序连续性的一种方法。
Cookie 能够帮助 Web 站点保存有关访问者的信息,以便服务器更好识别访问者。
是实现会话跟踪的一种重要手段作为客户端信息的一类,cookie信息以文本的的形式保存在客户端的硬盘上。
在系统盘下\Documents and Settings”,当前登录名对应的目录,可以看到一个名为“cookie”子目录。在该目录下,有许多文本文件,保存的就是cookie信息。
Cookie文件是属于文本文件,但是经过加密过的,一般通过普通文本工具无法查看到内容。
由于Cookie文件是经过加密处理的,所以在一般的用户看来只是一堆没有任何意义的数字和字母组合,但对于服务器的处理程序可以通过它完成很多功能。
浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4 KB,不同的浏览器对cookie限制不同。
如何开启浏览器cookie???
浏览器开启cookie,找到internet属性-->隐私-->高级,点击替代自动cookie,再点击总是允许会话
如何读写Cookie对象?
使用cookie必须结合request对象和response对象。写cookie到客户端使用response,读取客户端的cookie使用request。
写:
Cookie c=new Cookie(String,String);
c.setMaxAge(int);//存活时间,单位:秒
response.addCookie(c);
读:
Cookie[] cs=request.getCookies();
for(int i=0;i<cs.length;i++){
//遍历cookie数组
}
Cookie对象的方法
public Cookie(String,String) | 构造方法 |
void setMaxAge(int) | 设置cookie的过期时间。如果不设置,则cookie只在当前会话中有效,且不会保存到客户端磁盘中,关闭浏览器后会消失。 |
String getName() | 获取cookie的名称 |
String getValue() | 获取cookie的值 |
void setValue(String) | 设置cookie的值 |
void setPath(String) | 设置cookie在哪个目录下的JSP文件中有效。如果参数是/,此时服务器上的所有页面都可以接收到该cookie |
一个cookie的demo:
需求:
通过Cookie记录用户名和密码,当用户登录后通过Cookie保存用户名,下次访问该页面时,显示用户名信息。
首先,在登录页面输入用户名和密码登录后将用户名和密码通过cookie保存在客户端访问allcook.jsp页面可以查看刚才保存的cookie信息。
login2.jsp:
<%@ page contentType="text/html;charset=gbk"%>
……
<form action="addcook.jsp" method="post">
用户名:<input type="text" name="nam"><br>
密 码:<input type="text" name="pwd"><br>
<input type=submit value="登录">
</form>
……
addcook.jsp
<%
request.setCharacterEncoding("gbk");
String nam=request.getParameter("nam");
String pwd=request.getParameter("pwd");
//创建Cookie对象
Cookie c1=new Cookie("nam",nam);
Cookie c2=new Cookie("pwd",pwd);
c1.setMaxAge(300);//保存在客户端磁盘中,时间5分钟
c2.setMaxAge(300);
//将Cookie写入客户端磁盘
response.addCookie(c1);
response.addCookie(c2);
%>
Cookie被写在了客户端的文件中
allcook.jsp:
<%@ page contentType="text/html;charset=gbk"%>
……
<%
//获取客户端所有Cookie对象
Cookie[] cs=request.getCookies();
for(int i=0;i<cs.length;i++){
String name=cs[i].getName();
String value=cs[i].getValue();
out.println(name+"="+value+"<br>");
}
%>
Cookie的弊端:
cookie注意事项:
cookie信息是在浏览器中的,但并不是所有的浏览器都支持cookie功能,不同浏览器对cookie有不同的限制
Cookie传输的数据大小(4KB)限制了一些需要大数据存储应用的需求。
不同的网站中存储的cookie不是通用的。
cookie的安全性上面临居多挑战和质疑。
例如:cookie信息可能泄露个人隐私或被用来收集用户上网习惯,收集用户信息登录用户账号
session对象:
session对象提供一种机制,让服务器能辨认不同的客户端。是服务器端和客户端另一种保持状态的有效方法。 与Cookie不同的是Session信息保存在服务器端。服务器通过不同的session对象来记录不同的客户端。
session的方法:
String getId() | 取得session的ID |
void invalidate() | 取消session对象,并将对象存放的内容完全抛弃 |
void setMaxInactiveInterval(int) | 设定最大session不活动时间,若超过这个时间不活动,session将会失效,单位为秒 |
两种方式获取sessionID
session.getId();
request.getRequestedSessionId();
会话结束的四种方法
1.在web.xml文件中设置他的最大活动时间
<!--设置 session 的过期时间,单位是分钟-- >
<session-config>
<session-timeout>30</session-timeout>
</session-config>
值为-1表示永不过期,不推荐使用。
2.在JSP中通过session.invalidate()方法直接关闭一个会话
3.关闭浏览器后,服务器并不知道浏览器已经关闭,session对象依然存在,但”无人认领”,将自动过期。
4.调用session.setMaxInactiveInterval(1),1秒钟内不发请求则过期。
一个session的demo:
需求:
当用户正常登录验证后,转发到管理页面,而当用户未正常登录则无法访问管理页面。
login.jsp:
……
<form action="check.jsp" method="post">
用户名:<input type="text" name="nam"><br>
<input type=submit value="登录">
</form>
show.jsp:
<%@ page contentType="text/html;charset=gbk"%>
…//如果不登录,直接访问此页面时,则通过session存入的值进行验证
<% if(session.getAttribute("nam")==null){ %>
您还没有登录,无法访问此页面
//此处设置响应转发回登录页面,进行登录。
<%} else {%>
welcome,<%=session.getAttribute("nam")+"" %>
<a href="exit.jsp">注销登录</a>
<%} %>
<br><br>
<center>
<%
if(session.getAttribute("nam")==null){
%>
<a href="login.jsp">点击这里</a>返回登录页面.
<%} else {%>
网页正文内容
<%@ page contentType="text/html;charset=gbk"%>
<% //清空会话中的值,并销毁当前会话对象
session.invalidate();
response.sendRedirect("show.jsp");
%>
check.jsp:
<%@ page contentType="text/html;charset=gbk"%>
<%
request.setCharacterEncoding("gbk");
String nam=request.getParameter("nam");
if(nam!=null){//此处进行登录验证
session.setAttribute("nam",nam);//登录成功在session放置用户名
response.sendRedirect("show.jsp");
} else response.sendRedirect("login.jsp");
%>