以前用过Session和Cookie,对它们的概念也是一片模糊,今天研究了一下,说一说它们的联系和区别。

首先先说一下Cookie,Cookie是保存在客户端的一些文本文件,它可以记录你的用户ID,密码,浏览过的网页,停留的时间等等信息。当再次来到这个网站时,网站通过读取Cookies,可以得知用户的相关信息。比如可以不用再次输入账号密码等。

Session是保存在服务器上的,翻译过来Session可以翻译为会话,本来的含义是指有始有终的一系列动作/消息。Session的保持时间可以设置,工作原理是,在一个浏览器打开的连接到服务器的时候,创建一个Session,然后在保持浏览器不关闭的情况下打开一个新的窗口,也可以访问这个session。现在的浏览器都是多标签的,new一个标签或者在保持浏览器没有关闭的情况下新启动一个浏览器Session也可以访问。

在设置Cookie中,如果不设置过期时间,则Cookie和Session类似,在浏览器关闭的时候就自动消失,必须用setMaxAge()函数来设置Cookie的存活时间。这两种Cookie分别称为会话Cookie和持久Cookie。

Session的两种实现方式:

1.通过Cookie实现

2.通过URL重写实现

通过Cookie实现Session:把Session的id放到Cookie中

如果浏览器支持Cookie,创建Session的时候会把SessionID保存在Cookie中

如果不支持Cookie,必须自己变成使用URL重写的方式实现(response.encodeURL())

上述函数两个作用:1.转码2.URL后面加入SessionId

如果在禁用Cookie的情况下,可能引起某些网站不能正常访问,例如登陆某邮箱,在登陆进去的时候显示的是不同的页面,需要用SessionId来标识身份,如果不支持Cookie,也没有进行URL重写,所以这些服务是不能应用的。

下面是一些写入读取Cookie和session的代码。

设置Session:

import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class SetSessionServlet extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ HttpSession session = request.getSession(true); session.setAttribute("ip",request.getRemoteAddr()); response.getWriter().println("SetSession OK!"); } } 
读取Session:
import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class ShowSession extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ HttpSession session = request.getSession(true); String ip = (String)session.getAttribute("ip"); response.getWriter().println("ip=" + ip); } } 
 设置Cookie:import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SetCookie extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{ Cookie c1 = new Cookie("password","1234"); response.addCookie(c1); //设置写入文件的cookie Cookie c2 = new Cookie("client_ip",request.getRemoteAddr()); c2.setMaxAge(60*60); response.addCookie(c2); response.getWriter().println("setCookie OK!"); } } 
 读取Cookie:import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class GetCookie extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{ Cookie[] Cookies = request.getCookies(); for(int i=0;i<Cookies.length;i++){ Cookie c = Cookies[i]; response.getWriter().println(c.getName() + " + " + c.getValue()); } } }