新沂城市论坛

查看: 9134|回复: 0
打印 上一主题 下一主题

关于session

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
发表于 2005-10-16 01:38:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自 江苏省徐州市
甲是某个网站的会员,他要登入网站线上购物,他在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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
新沂城市论坛免责声明:站内会员言论仅代表会员个人观点,并不代表本站同意其观点,本站不承担由此引起的法律责任。
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|Archiver|手机版|小黑屋|新沂城市论坛

GMT+8, 2024-4-24 14:35 , Processed in 0.054000 second(s), 14 queries , Xcache On.

苏公网安备 32038102000111号

快速回复 返回顶部 返回列表