`
dengyll
  • 浏览: 89641 次
社区版块
存档分类
最新评论

Cookie和Session-----会话跟踪中的两个重要技术

 
阅读更多

Cookie的工作原理:

Cookie是最常用的客户会话跟踪技术。Cookie是将会话数据保存在客户端来维护会话状态的一种方式。它是服务器发送给浏览器的体积很小的纯文本信息,用户以后在访问同一个Web服务器时,浏览器会把Cookie原样发送给服务器。通过这种方式,保存了用户的会话状态。

Cookie分为两类:持久的和暂时的。持久的Cookie会被存储在客户端文件中;暂时的Cookie存储在内存中,一旦浏览器关闭Cookie就消失了。一般来说,客户端浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4kb,因此Cookie不会占用太大的硬盘空间。虽然Cookie很好用而且持久性高,但是由于有些用户担心Cookie对个人隐私有威胁,会关闭Cookie。一旦这样,便无法利用Cookie来达到会话追踪的功能了。下面看看Cookie具体怎么使用:

SetCookies.java(写入)

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class SetCookies extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		
		Cookie c1 = new Cookie("password", "123");
		response.addCookie(c1);
		
		Cookie c2 = new Cookie("client_ip", request.getRemoteAddr());
		
		//设置cookie的生命周期为一个小时,单位为秒
		c2.setMaxAge(60*60);
		response.addCookie(c2);
		
		response.getWriter().println("SetCookies OK!");
	}
}

ShowCookies.java(读取)

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class ShowCookies extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		Cookie[] Cookies = request.getCookies();		
		for (int i=0; i<Cookies.length; i++) {
			Cookie c = Cookies[i];
			response.getWriter().println(c.getName() + ", " + c.getValue());
		}
	}
}

Session的工作原理:

HttpSession对象自动为开发者提供一个可以方便地存储会话信息的地方,HttpSession的会话机制是基于Cookie和URL重写(URL重写就是利用GET方法,在URL的尾部添加一些额外的参数来达到会话追踪的目的)技术,融合了这两种技术的优点。当客户端允许使用Cookie时,HttpSession对象使用Cookie进行会话追踪,如果客户端禁用Cookie,则选择使用URL重写。

session与Cookie一样拥有特定的生命周期。一个session可以利用isNew方法来得知是否为一个新的session。所谓“新”的session就是说,他已经被Server产生,但是Client尚未被告知。

一般来说,session在一段时间内没有起作用就会自动失效,也就是Server会自动控管session失效的时间,不过时间的长短通常因容器而异,也可以自己手动设定session的失效时间。下面看看session具体怎么使用:

SetSessionServlet.java(写入)

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!");
	}
}

ShowSessionServlet.java(读出)

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class ShowSessionServlet 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-session, 基于简单cookie的会话中间件.zip

    cookie-session, 基于简单cookie的会话中间件 cookie会话 基于简单cookie的会话中间件。用户会话可以通过 Cookies 以两种主要方式存储: 在服务器上... 这个模块在cookie中存储会话数据,而像 express会话的模块在cook

    cookie-session:基于cookie的简单会话中间件

    cookie会话 简单的基于cookie的会话中间件。 用户会话可以用cookie的两种主要方式存储:在服务器上或在客户端上。... cookie-session可用于存储“轻量”会话,并包含一个标识符以查找数据库支持的辅助存储

    Session Cookie的HttpOnly和secure属性

    一、属性说明: 1 secure属性 ...也就是说两个属性,并不能解决cookie在本机出现的信息泄漏的问题(FireFox的插件FireBug能直接看到cookie的相关信息)。 二、实例 项目架构环境:jsp+servlet+applet

    PHP cookie与session会话基本用法实例分析

    cookie即是传统的会话控制,由于要存储的信息是保存在客户端的,所以安全系数较低,而session会话控制是将要存储的信息保存在服务器上的,所以相对于cookie安全系数较高. 不论是在使用cookie方式存储,还是session...

    详解node.js平台下Express的session与cookie模块包的配置

    首先下载两个模块包 session模块包:用于保持登录状态或保持会话状态等。 npm install express-session --save-dev cookie模块包:用于解析cookie。 npm install cookie-parser --save-dev 接着在app.js(我在node....

    purescript-biscotti-session:PureScript会话管理

    提供了两个会话存储: Cookie和Memory 。 Session提供4个基本功能: create , get , set和destroy 。 create需要一个SessionStore和您的会话数据,并返回代表您的新会话的 。 get使用SessionStore和Cookie并返回您...

    java-servlet-api.doc

    当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。 Servlet也可以执行ServletRequest接口和ServletResponse接口。...

    会话技术之Cookie详解

    很早之前写过一篇关于Cookie和Session的文章,那是2017年的事咯,当时还是个学生,技术也菜,对知识理解的也不深。恰巧有机会重新学习Java Web,今天就再次来简单的聊一聊Cookie与Session。 1.会话与会话技术 ​在...

    会话管理器「session manager」-crx插件

    0. 正常情况下, 浏览器保存 cookie 都是和域名关联的, 在不同的 tab 之间访问同一个域名, cookie 的修改都会互相影响。 1. 一般情况下,session id 都是通过 cookie 保存 2. 这样,我们就可以使用插件保存当前 ...

    express如何使用session与cookie的方法

    我们通常使用cookie和session来确定会话双方的身份。 cookie cookie 是从服务器端发送的,服务器给不同的用户发送不同的标识,这个标识表示用户的身份,服务器通过客户端发送的这个标识来识别用户的身份,从而查询...

    java web技术开发大全(最全最新)

    除此之外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》还提供了两个完整的实例来讲解开发SSH的详细步骤和方法。通过对这两个实例的学习,读者可以对SSH开发模式有更透彻地理解和认识。SSH是...

    同浏览器不同窗口不同用户Session问题

    正对java Web项目,同浏览器同时打开两个登录窗口(不同Tag),用不同用户登录,为避免使用同一个Session,需要使用这段代码。否则先登录的用户的Session会变成后登录用户的Session.相关系统使用权限也会变。

    php禁用cookie后session设置方法分析

    我们都知道当在session 会话有基于cookie和基于url两种传递SESSIONID的方法。为了实现客户端禁止cookie发送的情况也不影响客户登陆网站,可以设置 php.ini中 session.use_trans_sid=1 ,表示当客户端浏览器禁止...

    会话技术之登录状态的保持

    在前面我们学习了Cookie和Session两种会话技术,这个也是比较主流的两种会话技术。除了Cookie、Session,会话技术还有重写Url、隐藏表单域两种,不过使用起来比较不方便,因此就不进行介绍了。 ​那理论学完了,我们...

    java web开发技术大全

    除此之外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》还提供了两个完整的实例来讲解开发SSH的详细步骤和方法。通过对这两个实例的学习,读者可以对SSH开发模式有更透彻地理解和认识。SSH是...

    微信小程序保持session会话的方法

    一般我们web网站都会有cookie来保存session ID,将用户和服务器保持在一次会话中,但是很遗憾,微信小程序不支持cookie,他的每一次请求就是一次会话,这样就会产生一个问题,每次请求都需要确定当前的用户是谁,...

    Session Share-crx插件

    两个用户都必须安装该插件。1.在“上下文”菜单中“复制当前会话”。2.将复制到剪贴板复制到收件人的代码转发。3.收件人将代码复制到浏览器的地址栏,然后单击“接管cookie并加载网站”或在地址栏的建议中的会话共享...

    Redux-Session:Redux中间件,用于在外部存储中自动设置状态数据并对其进行水化处理

    两个常见的示例是localStorage和cookie。 尽管这些工具的界面相当简单,但通常涉及用用于管理这种其他状态形式的语句来乱码您的代码。 借助Redux,我们可以将状态保持在一个地方,并允许“中间件”订阅状态更改或...

    详解Nginx反向代理实现会话(session)保持的两种方式

    ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。 ip_hash语法: upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; ...

    PHP学习笔记之session

    cookie和session是web开发新手容易搞混的两个概念,弄清楚两者有助于对web交互更好的理解。个人认为session和cookie的区别主要有如下几点: cookie 信息保存在客户端 具体实现由客户端负责 数据大小和数量一般有...

Global site tag (gtag.js) - Google Analytics