java servlet使用session里的session 数据共享吗?不安全?

用户名:kiritor
文章数:148
访问量:14477
注册日期:
阅读量:1297
阅读量:3317
阅读量:461348
阅读量:1145754
51CTO推荐博文
&&& & & && 前言 &&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&& 前面的学习中我们知道HTTP协议是一种无状态协议。有时候我们需要在多个页面之间共享
&&&&&&&&&&&&&&&&&&& 数据,这在web应用中如何实现呢?Session可以帮助我们做到!
&&&&&&&&&&& Session
&&&&&&&&&&&&&&&&&&&&&&&& 用户访问某个网站时,web服务器就会在服务器的内存中为该浏览器分配一个空间,这个
&&&&&&&&&&&&&&&&&&&& 空间是被浏览器独占的。该空间就称其为Session空间,用户通过浏览器访问服务器,再到
&&&&&&&&&&&&&&&&&&&& 浏览器退出访问这段时间叫做session会话,这个会话时间通常为30min(可以手动修改)。
&&&&&&&&&&&&&&&&&&&&&&& 650) this.width=650;" src="http://img.blog.csdn.net/47609" alt="">
&&&&&&&&&&&&&&& Session的作用
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 理解Session最好从Session的作用入手,一般来说Session的作用如下:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& && 1、保存用户登录信息。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2、同一客户端浏览器各个页面共享数据
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 3、验证用户是否非法登录某个页面
&&&&&&&&&&&&&&&&&&&&&&&&&&&& & & 对于Session的理解我们应该从浏览器对web服务器的一次会话中去理解。
&&&&&&&&&&&&&&&&&&&&&&&&&& session数据的存在时间默认为30min,当你浏览某个网站,中途出去吃饭
&&&&&&&&&&&&&&&&&&&&&&&&&& 浏览器并未关闭。超过30min之后session数据会被清空。当你从新浏览页面
&&&&&&&&&&&&&&&&&&&&&&&&&& 时,服务器会查询看session空间里面的内容若为空,则需用户重新登录。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & 这也是一种较为安全的做法。
&&&&&&&&&&&&&&& Session与Cookie
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 与Cookie不同的是Session是存在与服务器的,是有Tomcat服务器维护的,
&&&&&&&&&&&&&&&&&&&&&&&&&&& 而session存在与客户端浏览器,有浏览器维护。基于这点Session相对于Cookie
&&&&&&&&&&&&&&&&&&&&&&&&&&& 来说更加的安全。
&&&&&&&&&&&&&&&& Session的工作原理
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 1、服务器为客户端创建并维护一个Session对象,用于存放数据。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2、在创建Session对象的同时,服务器将会为该Session对象生成一个唯一的
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& sessionID
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 3、服务器以cookie的方式将sessionID存放在客户端。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 4、当浏览器再次访问该服务器时,会将sessionID作为cookie信息带到服务器
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 服务器可以通过sessionID检索到以前的session对象,并对其进行访问。
&&&&&&&&&&&&&&&& Session源码
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 了解了session的概念和工作原理之后我们来看看Session的源码,通过其源码的
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 阅读了解下session有哪些操作。具体方法笔者也不过多的去阐述了,给个方法一览
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 吧。
&&&&&&&&&&&&&&&&&&&&&&&&& & & & & & & & & && 650) this.width=650;" src="http://img.blog.csdn.net/29375" alt="">
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 这里我们经常使用的是setAttribute和getAttribute方法,同样setMaxInactiveInterval
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 方法设置Seesion会话有效的时间。以秒为单位。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 那么HttpSession又是如何得到的呢?HttpSession是从请求中的得到的,具体的做法
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 就是。
HttpSession session = request.getSession();//返回当前request的session,如果没有则创建一个&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 两外可以参考:
* Returns the current &code&HttpSession&/code&
* associated with this request or, if there is no
* current session and &code&create&/code& is true, returns
* a new session.
* &p&If &code&create&/code& is &code&false&/code&
* and the request has no valid &code&HttpSession&/code&,
* this method returns &code&null&/code&.
* &p&To make sure the session is properly maintained,
* you must call this method before
* the response is committed. If the container is using cookies
* to maintain session integrity and is asked to create a new session
* when the response is committed, an IllegalStateException is thrown.
* @param create &code&true&/code& to create
a new session for this
&code&false&/code& to return &code&null&/code&
if there's no current session
the &code&HttpSession&/code& associated
with this request or &code&null&/code& if
&code&create&/code& is &code&false&/code&
and the request has no valid session
* @see #getSession()
public HttpSession getSession(boolean create);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 简而言之:
&&&&&&&&&&&&&&&&&&&&&&&&& & &&& HttpServletRequest.getSession(ture) 等同于 HttpServletRequest.getSession()
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& HttpServletRequest.getSession(false) 等同于 如果当前Session没有就为null;
&&&&&&&&&&&&&&&&& Session简单实例--用户验证
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 有这么一种要求当用户登录一个网站,中途有事,但并未关闭浏览器,等到用户回来的
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 时候如果Session会话时间结束处于安全性的考虑需要用户重新登录。这里我们做一个简单
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 的实践。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 我们现在Servlet中做简单的登录验证,验证通过之后就将用户信息保存在Session中,之后
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 再在各个jsp页面中添加验证代码,验证不通过则返回登录界面。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Servlet逻辑部分代码如下:
&&&&&&&&& protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);//得到HttpSession对象
String email = request.getParameter(&email&);
String password = request.getParameter(&pass&);
User user = new User();
user.setEmail(email);
user.setPassword(password);
if(email.equals(&&)&&password.equals(&kiritor&))
session.setAttribute(&user&, user);
session.setMaxInactiveInterval(20);//设定时间为20秒
System.out.println(session.getAttribute(&user&));
response.sendRedirect(&index.jsp&);
}&&&&&&&&&&&&&&&&&&&&&&&&&&&& 之后我们在index界面简单的添加验证代码。
&&&&&&&&&&&&&&&&&&&&&&&&&& &%@page import=&com.Dao.User&%& &%@ page language=&java& contentType=&text/ charset=UTF-8&
pageEncoding=&UTF-8&%& &!DOCTYPE html PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN& &http://www.w3.org/TR/html4/loose.dtd&& &html& &head& &meta http-equiv=&Content-Type& content=&text/ charset=ISO-8859-1&& &title&Insert title here&/title& &/head& &body&
HttpSession httpSession = request.getSession();
User user = (User)httpSession.getAttribute(&user&);
out.print(user.getEmail());
欢迎来到首页 &/body& &/html&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 看看实际的效果吧。
&&&&&&&&& & & & & & & && &&& 650) this.width=650;" src="http://img.blog.csdn.net/13187" alt="">
&&&&&&&&&&&&&&&&&&&&&&&&&&& 登录验证成功之后我们进入index界面,之后我们耐心的等待20秒钟,在刷新页面
&&&&&&&&&&&&&&&&&&&&& 可以发现的是重新跳转到登录界面了。
&&&&&&&&&&&&&&&&&&&&&&& & & && 650) this.width=650;" src="http://img.blog.csdn.net/55140" alt="">
&&&&&&&&&&&&&&&&& Session存活时间
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 上述的代码中我们修改了Session存在时间,那么有其他的方式修改其存在时间吗
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 答案是肯定的,而且不止一种,现在笔者就简要的对其进行下总结。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 1、& 在tomcat――&conf――&servler.xml文件中定义:
&Context path=&/test& docBase=&/test& defaultSessionTimeOut=&3600& isWARExpanded=&true& isWARValidated=&false& isInvokerEnabled=&true& isWorkDirPersistent=&false&/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2、在web.xml中定义:这个针对具体项目
&session-config& &session-timeout&20&/session-timeout& &/session-config&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 3、程序中定义,这个就不多提了,上面有实现。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 4.Tomcat在conf/context.xml文件设置:这个是针对所有的项目了
&Manager className=&org.apache.catalina.session.PersistentM anager& & debug=0 saveOnRestart=&true& maxActiveSession=&-1& minIdleSwap=&-1& maxIdleSwap=&-1& maxIdleBackup=&-1& &Store className=&org.apache.catalina.session.FileStore& directory=&../session& /& //这里代表的是文件持久化.也可以自己实现Store &/Manager&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 好了,今天的总结就到这里了。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& By&&&&& Kiritor
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)servlet中怎么删除session
全部答案(共2个回答)
Root密码忘记了怎么办1. 停止MYSQL服务可以直接使用命令:NET STOP MYSQL(在DOS命令行下)2. 在DOS命令行下输入命令MYSQLD –...
var code = "";
js脚本中:只能通过el获取session的值: ${sessionScope.code}
你这样写只能说写的太自由了.
开机蓝屏数数0—100(检测硬盘)按下面的方法修复一下磁盘也可以解决你磁盘碎片整理出的问题。
1)这是系统在扫描你的硬盘,可能是你自己操作的问题,如果你非法关机...
这是系统在扫描你的硬盘,可能是你自己操作的问题,如果你非法关机,直接断电或者直接按电源关电,电脑开机的时候会对你的硬件做检查,包括你的硬盘。
还有就是你的电脑真...
session是存储在内容当中,默认为20分钟
cookies是保存到客户端的一段文件,服务器端判断文件,如果存在那么读取,如果不存在那么登陆成功,生成cook...
答: 记录孩子身高体重的数据怎么找不到了?
答: 没有恒心和耐不得寂寞者,不要去学
答: 首先的前提条件是,你们的局域网主机允许所属的工作机互访并具有对文件完全修改的权力(这是由管理员设定的)。
假如你的机器编号是a015(或是直接的网址如: ),另...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:1234567891011121314151070人阅读
& 在JavaWeb 中实现数据共享往往通过定义属性的方法来实现,而什么是属性呢?它类似于Hashmap中的键值对,有属性名和属性值作为设置属性方法的参数,而在其他的地方通过属性名去获取属性的值。
& 而定义定义不同级别的值,数据共享的范围是有区别的,接下来我就详细的介绍下我对application(应用级) session(会话级) &request(请求级)这三种级别的认知。
& &首先是application(应用级):应用级所作用的范围是最大的,它利用到的类是ServletContext,在一个web被创建时,会自动初始化一个ServletContext对象,我们可以通过getServletContext()方法去获取这个对象,通过setAttribute(参数名, 参数值)方法来进行属性的设置,因为这是一个应用级对象所以你只要在当前的应用中都可以通过获取应用的ServletContext对象然后再通过getAttribute(属性名),去获取到该属性的值从而实现数据的共享。
& 接下来说说session(会话级) :会话级作用的范围仅此于应用级,那么什么是会话级呢?所谓的会话级,就是创建一个页面后执行的跳转、重定向、整合等都可以是一个回话,只要你不关闭浏览器页面,就是一次会话。 它通过HttpSession类来实现一次会话中的数据共享。类似于ServletContext,首先通过request.getSession()方法去获取一个HttpSession对象,然后采用setAttribute(参数名,
参数值)方法来进行属性的设置,在会话其它部分再通过getAttribute(属性名),去获取到该属性的值从而实现数据的共享。
& 最后是request(请求级):请求级作用的范围是最小的,它仅作用于一次请求,也就是说客户端向服务器发送一次请求的过程中,这也就意味着重定向是无法访问到request(请求级)的属性的,要想在一次请求中获取请求级属性值,同时还想到另一个Servlet只能选择跳转RequestDispatcher rd = request.getRequestDispatcher(&RS2&);
rd.forward(request, response);和整合rd.include(request, response);,至于属性的设置和获取用到的是request.setAttribute(&name&, name)和request.getAttribute(&name&)方法。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1081次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 httpservlet session 的文章

 

随机推荐