上一篇:jsp与javaBeans的结合使用 >>
关于seeion的文章
刘正吉
ljj@mlc.edu.tw
未经作者同意改编,不过我相信他不会介意的
甲是某个网站的会员,他要登入网站线上购物,他在login.jsp打上他的帐号密码,认证通过後,伺服器把它丢到list.jsp浏览网站上的货物,当他选好要买的货物後要订购了,伺服器又把它丢到buy.jsp处理订货的事宜。甲这个人只在login.htm打上帐号密码,伺服器透过login.jsp确认甲是个合法注册的会员,但是list.jsp和buy.jsp使用者不需要打帐号密码,伺服器要如何确认现在进来的甲还是乙?又或者有人根本就不从login.jsp进入网站,他直接从list.jsp或buy.jsp进来,那不就避过了帐号密码的检查?
要解决这个问题,方法有很多,可以用html语法的<input type="hidden">的方法,或者是用cookie,但是以上两种方法的安全性还不够,应该用session来解决这个问题。刚才的问题,如果以session的流程来看,甲透过login.jsp进入网站,伺服器会给他一个独一无二的编号证明他就是甲(就好像每个人都有身份证字号,而且都不会重覆),如果是乙进来话,伺服器也给他一个独一无二的编号。这个独一无二的编号就是sessionID。这个sessionID会被送到使用者的浏览器内,当使用者到浏览其他网页时,浏览器会把这个sessionID送到伺服器,伺服器便可以比对现在来的是甲或是乙。
1.如果你想要看你的sessionID长什么样子,语法应该这么写
session.getId();
2.甲或乙进入网站,服务器都会分配每个人一个session,每个人都不会重复,甲是会员,输入了帐号密码後顺利通过验证,这个服务器可以在他的session上做个记号,表示他通过了验证,
session.setAttribute("LogOk","yes");
这个意思是说,服务器在甲的session内放了一个LogOk的属性,它的值是"yes"。当然也还可以放别的东西,譬如说把甲输入的帐号密码放进去
session.setAttribute("userid","甲所输入的帐号");
session.setAttribute("userpass","甲所输入的密码");
(请注意,这些Attribute的信息都是存在Server内,不会被送到使用者的浏览器内,会送到浏览器的只有sessionID而已。如此才能保障相关资料不被人窃取。)
甲通过验证後,伺服器便把它导向到list.jsp做处理。(response.sendRedirect("list.jsp");)乙不是会员,当他从login.jsp进去後,没办法通过验证,於是被导向回login.jsp重新输入密码(response.sendRedirect("login.jsp");)
3.甲被导向到list.jsp,list.jsp怎麽知道甲通过了验证,而且怎麽证明它是甲呢?可以透过下面方法把刚才在session上所做的记号取出来
String LogOk=(String)session.getAttribute("LogOk");
String userid=(String)session.getAttribute("userid");
String userpass=(String)session.getAttribute("userpass");
透过getAttribute取得LogOk的值,去检查一下LogOk是否等于"yes"就知道这个人有没有通过验证了,另外也取得了甲输入的帐号及密码,可以去资料库比对现在进来的是否是甲这个人。
(要注意的是session.getAttribute("")的前面,在这个例子来讲,要加(String),因为透过setAttribute的方式存进session内的是个物件(Object),取出来时,要明确告诉java它是什麽物件,所以要用(String)session.getAttribute("LogOk")。同理,如果在存进session时是是存一个ResultSet,那取出来便要用(ResultSet)session.getAttribute("....");)
而乙这个人呢,还不死心,login.jsp进不来,他还想骇进来,直接打list.jsp,同样的,程式从session内找出是否有LogOk,它的值是不是等於"yes",如果不是,很抱歉,又把它导回到login.jsp。
透过session的方式,可以做到对同一个使用者在不同的网页之间资料的分享。基本上来说,tomcat对每一个网页进来的人都会建立session,其有效时间内定为30分钟,如果超过三十分钟使用者都没有再浏览任何网页,其sessionID便会失效,当然在session内所设定过属性也会消失。使用者再重新进来,便是另一个session了。
以下的session方法,各位可以参考看看:
session.setAttribute("属性名",属性值)----将资料存入session
session.getAttribute("属性名");----从session取得资料
session.setMaxInactiveInterval("秒数");---设定session的有效执行时间(单位:秒)
session.getMaxInactiveInterval();----取得session的有效执行时间(单位:秒)
session.isNew();----判断这个session是不是新的,是的话传回true,否则传回false
session.invalidate();----强制session中断,常用在使用者登出时
session.getCreateTime();----取得session建立的时间,其值为long值。
session.getLastAccessedTime();----取得session最後的存取时间
另外,如果有些网页,根本就不需要建立session,要如何把它关掉?应该在page的地方设定session="false"
例:<%@ page contentType="text/html;charset=big5" session="false" %>
如此,这个网页便不会建立任何session
下一篇:Servlet、Jsp性能优化 >>
相关文章:
- · Vsftpd1.2.0的高级配置篇
- · Vsftpd1.2.0的基础配置篇
- · SERV-U 6002版安全设置全攻略(3)
- · SERV-U 6002版安全设置全攻略(2)
- · SERV-U 6002版安全设置全攻略(1)
- · SERV-U 6002版安全设置全攻略(4)
- · FTP的建立与维护
- · 用SSL加密增强FTP服务器安全性
- · 教你如何巧妙设定匿名FTP的安全
- · 创建IIS6.0下用户隔离模式FTP站点
- · Secure FTP:安全的企业级FTP服务器
- · BulletProof FTP Server:物美价廉
- · ArGoSoft FTP服务器:架设只要一分钟
- · FTP服务器架设--管理篇
- · FTP服务器架设--架设篇
- · FTP服务器架设--安全篇
- · serv-U FTP软件的攻击防守
- · FTP服务器快速架设全功略
- · IIS建立FTP就真的那么弱吗
- · 关于ftp服务程序中不安全因素研究
- · FTP服务器安全
- · FTP服务器端软件Serv-U教程(6)
- · FTP服务器端软件Serv-U教程(2)
- · FTP服务器端软件Serv-U教程(5)
- · FTP服务器端软件Serv-U教程(3)
- · FTP服务器端软件Serv-U教程(1)
- · FTP服务中允许上传权限存在的问题
- · 内网FTP服务器架设不完全解析
- · Linux下FTP的配置与应用
- · wingate FAQ大全
- · SyGate安装前奏
- · Leapftp的安全问题
- · FTP命令详解
- · 站点FTP参数设置
- · Linux服务器设置指南-代理接入服务器(2)4
- · Linux服务器设置指南-代理接入服务器(1)2
- · Linux下安PHP,APACHE,MYSQL,PERL方法3
- · 在Linux下建立强大的FTP搜索引擎3
