请高手帮忙解释一下"session"!

zhicheng 2005-09-01 05:31:40
只是知道session是服务器给每个用户的一个标识用来记录在本次会话中的相关信息,另外他的范围application.request有不同.
但是session这个概念是什么时候引进的呢?是http协议里面已经说明了呢?还是在服务器端的程序在实现http时引入的呢? htpp协议又是何时诞生的呢?是为了互连网?

谢谢了先!
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mwsssxu 2005-09-01
  • 打赏
  • 举报
回复
大家理解有误吧。看清楚楼主问的是什么啊。是关于HTTp协议的。
liuquanyi 2005-09-01
  • 打赏
  • 举报
回复
我说的再好不如三楼!
superslash 2005-09-01
  • 打赏
  • 举报
回复
学习一下
shenpipi 2005-09-01
  • 打赏
  • 举报
回复
佩服楼上,呵呵.
a2048 2005-09-01
  • 打赏
  • 举报
回复
甲是某个网站的会员,他要登入网站线上购物,他在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
sunnihao 2005-09-01
  • 打赏
  • 举报
回复
一个用户,给你安排一个秘书,在后边记着,你要记得东西

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧