理解Session和Cookie

         以前用过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());
		}
	}
}



评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值