session简介

来源:互联网 发布:angular.js中文社区 编辑:程序博客网 时间:2024/05/28 04:55

session简介

  session,中文常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话是从拿起带你嗨拨号到挂断电话这中间的一系列过程可以称之为一个session。

  session在WEB开发环境下的语义又有了新的扩展,它的含义是指一类用来在客户端和服务器端之间保持状态的解决方案。有时候session也用来指这种解决方案的存储结构。

session机制

  session机制采用的是在服务器端保持HTTP状态信息的方案。

  服务器使用一种类似于散列表的结构来保存信息。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含了一个session标识(即sessionid),如果已经包含一个sessionid则说明以前已经为此客户创建过session,服务器就按照sessionid把这个session检索出来使用。如果客户请求不包含sessionid,则为此客户创建一个session并为此客户创建一个session并且生成一个与此session相关联的sessionid,这个sessionid将在本次响应中通过cookie的方式返回给用户端保存。

保存sessionid的几种方式

  保存sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照骨规则把这个标识发送给浏览器。

  由于cookie可以被人为的禁用,必须有其他的机制以便在cookie被禁用时仍然能够把sessionid传递回服务器,经常采用的一种技术叫做URL重写,就是把sessionid附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个sessionid。

session cookie

  session通过sessionid来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为SESIONID的输出cookie,这称之为session cookie,以区别persistent cookies(也就是我们常说的cookie),sessioncookie是存储于浏览器内存中,并不是写到硬盘上,通常看不到SESSIONID,但是当把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递SESSIONID,这时地址栏可以看到。

  session cookie针对某一次会话而言,会话结束(session cookie也就随着消失了,而persistent cookie只是存在于客户端硬盘上的一端文本。

  关闭浏览器,只会使浏览器端的内存里的session cookie消失,但不会使保存在服务器端的session对象消失,同样也不会使已经保存到硬盘上的持久化cookie消失。

持久化session cookie:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>My JSP 'session1.jsp' starting page</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>    <%    //持久化session     Cookie cookie=new Cookie("JSESSIONID",session.getId());    cookie.setMaxAge(30);    %>    <%=session.getId() %>  </body></html>

第一次打开:


再次打开(30秒以内):