JavaEE session机制
JavaEE session机制
Http协议:
在讲session之前,必须说下Http协议,HTTP是一个client和server端请求和应答的标准(TCP)。由HTTPclient发起一个请求,建立一个到server指定port(默认是80port)的TCP连接。HTTPserver则在那个port监听client发送过来的请求。一旦收到请求,server(向client)发回一个状态行,比方"HTTP/1.1200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其他一些信息。
也就是Http协议是无状态保持功能的,所以我们说下我们的session机制,就是为了保存相应浏览器的身份识别功能的。
Session技术:
1,什么是session(会话)
在server端维护用户状态的一种状态管理技术,事实上现过程:当浏览器发给你文server时,server会创建一个对象(称为session对象),
该对象有一个唯一的id号(称为sessionId),然后,server在默认情况下,会使用cookie技术,将sessionId发送给浏览器,
浏览器下次訪问server时,会将sessionId携带给server。server会根据该sessionId查找到相应的session对象(用户的状态能够写到session对象上)。
2,怎样创建session对象?
1),HttpSessionsession =request.getSession();//server会创建一个符合HttpSesion接口标准定义的session对象
2),HttpSessionsession = request.getSession(boolean flag);
当flag为true:
浏览器发送请求给server,server会查看请求中有无sessionId,若没有,则创建一个session对象;
若有,还要看要查找的那个session对象是否仍然存在(由于某种原因,比方超时限制,server会删掉session对象),有存在则返回;若不存在则创建一个新的对象
当flag为false:
浏览器发送请求给server,server会查看请求中有无sessionId,若没有,返回一个null;
若有,还要看要查找的那个session对象是否仍然存在(由于某种原因,比方超时限制,server会删掉session对象),有存在则返回;若不存在则返回一个null
3),HttpSessionsession =request.getSession(); 等价于 HttpSessionsession = request.getSession(true);
3,session中的经常用法
session.setAttribute(Stringname,Object obj);
Objectsession.getAttribute(String name);//一般要得到后转型
session.removeAttribute(Stringname);//去除某个属性
Stringsession.getId();
4,设置sesion的最大不活动时间
session.setMaxInactiveInerval(intseconds);
session.invalidate();//使之马上失效
5,使用配置文件,设置session的失效时间,
方式一,设置整个server的配置失效时间,这个方式会影响到该server上的全部应用。Tomcat默认30分钟
TOMCAT_HOME/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
方式二,针对某个特定的应用进行配置失效时间
仅仅须要改动web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
6,样例:
A,对要保护的页面进行session验证
session的验证:
1,在登录成功后,写入数据做一个session属性加入
<%
session.setAttribute("user",user);
%>
2,在要保护的页面加上session验证代码
<%
Objectobj = session.getAttribute("user");
if(null== obj){
response.sendRedirect("login.jsp");
}
%>
3,为了安全起见(有些时候浏览器没关,session还是存在的),做一个安全退出
HttpSessionsession = request.getSession();
session.invalidate();//使之失效
response.sendRedirect("login.jsp");
B,购物车
Product:产品
idlong,
modelString,
picNameString,
proDescString,
pricedouble;
CartItem:商品条目
productProduct,
quantityint;
Cart:购物车
itemsList<CartItem>,
booleanadd(CartItem item),
List<CartItem>list(),
delete(longid),
clear(),
modify(longid, int quantity),
doublecost();
7,假设用户禁止了cookie,怎样实现session机制?(怎样实现sessionId的跟踪)
使用URL重写机制:
假设要訪问的web组件(jsp或者servelt),须要session机制的支持(用到session的对象),
可是浏览器端却禁止了cookie技术,那么不能直接在地址栏输入要訪问的web组件的定制,而要用server生成的地址,
而应该使用server生成的一个地址(该地址后会携带sessionId)
怎样生成一个携带sessionId的地址?
A。对于链接、表单提交,使用response.encodeURL("url地址")。
比方:<ahref="<%=response.encodeURL("url")%>"></a>
B。对于重定向,使用response.encodeRedirectURL("url地址")。
比方:response.sendRedirect(response.encodeRedirectURL("url地址") );
C。对于转发,无须考虑,由于在server内部的跳转,无须与浏览器交互,不予考虑
Session机制原理图:
JavaEE session机制的更多相关文章
- zookeeper源码分析之六session机制
zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...
- Cookie/Session机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- redis+cookies实现session机制(解决 手机浏览器不自动回传cookies导致session不可用问题)
昨天在手机端测试自己的项目遇到如下情况. 1.在手机上(苹果qq浏览器),登陆时存在session中的图片验证码结果,一直获取不到,考虑是cookies的问题.但是其他网站有貌似可以正常使用cooki ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- PHP中的SESSION机制
[转] php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧. c ...
- session机制详解以及session的相关应用
session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...
- Cookie/Session机制
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
- [转]Cookie/Session机制详解
原文地址:http://blog.csdn.net/fangaoxin/article/details/6952954 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用 ...
- 转:理解Cookie和Session机制
原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...
随机推荐
- android listview滚动到顶部
1.为了实现类似IOS点击状态栏,列表回滚到顶部的功能(要平滑滚动效果),android上点击一个按钮或是图片什么的也可以让listview一次性滚动到顶部(滑动太多页时,一次可能滚不到顶部,使用ha ...
- C++辛格尔顿
设计模式是编程的焦点.经常在面试时进行审查,Singleton模式是最简单的.最常见的.大部分的主模式.所以大部分的采访是测试考试的Singleton设计模式. 以下我们就来看看单例模式怎样实现(C+ ...
- 基于visual Studio2013解决C语言竞赛题之1070删除相同节点
题目 解决代码及点评 /************************************************************************/ /* ...
- TCP/IP笔记 一.综述
1. TCP/IP分层 TCP/IP 是四层的体系结构:应用层.运输层.网际层和网络接口层,如下图: OSI协议是国际标准的网络协议,但是由于OSI的实用性等问题造成OSI没有流行起来.目前国际上广泛 ...
- 【开发手记一】老生常谈:简简单单配置ZED板开发环境
说明:整理之前项目博客,此系列之前发表于与非网 http://www.openhw.org/module/forum/thread-552476-1-1.html 在拿到开发板和配套教材之前,我们小组 ...
- 自拉ADSL网线搭建站点server,解决动态IP、无公网IP、80port被封、HTTP被屏蔽的方法
自己的server搭建站点应用,提供站点服务,能够不用备案,但可能会面对网络限制问题,如动态公网IP.无公网IP.80port被封.HTTP被屏蔽,这些复杂网络情况. 依据本地网络环境,能够针对不同的 ...
- 进阶-案例九: WD中实现export 到Excel,Doc,Txt.
1.导出excel 文件代码 导出事件代码: METHOD onactionimport . *导出excel: DATA: lo_node TYPE REF TO if_wd_context_nod ...
- js获取当前日期,网页头部用
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Highcharts将数据以图表的形式展现
1.首先将Highcharts插件所需的js跟css样式文件引入项目中,下载地址为:Highcharts.rar 2.在前台页面中添加一个存放图表的容器 <div id="contai ...
- 可以根据柜子内表取出所有的柜子信息的BAPI函数
DATA: gt_hunumbers TYPE STANDARD TABLE OF bapihunumber, gt_huitem TYPE STANDARD TABLE OF bapih ...