社区
Web 开发
帖子详情
请高手帮忙解释一下"session"!
zhicheng
2005-09-01 05:31:40
只是知道session是服务器给每个用户的一个标识用来记录在本次会话中的相关信息,另外他的范围application.request有不同.
但是session这个概念是什么时候引进的呢?是http协议里面已经说明了呢?还是在服务器端的程序在实现http时引入的呢? htpp协议又是何时诞生的呢?是为了互连网?
谢谢了先!
...全文
88
6
打赏
收藏
请高手帮忙解释一下"session"!
只是知道session是服务器给每个用户的一个标识用来记录在本次会话中的相关信息,另外他的范围application.request有不同. 但是session这个概念是什么时候引进的呢?是http协议里面已经说明了呢?还是在服务器端的程序在实现http时引入的呢? htpp协议又是何时诞生的呢?是为了互连网? 谢谢了先!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
一个用户,给你安排一个秘书,在后边记着,你要记得东西
微服务架构下的分布式
Session
管理
Session
一直以来都是Web应用中不可或缺的一个组成部分,在Web应用架构的变迁与演进过程中,
Session
管理也在随之改变,不同架构下有着不同的
Session
管理实现。 而时下热门的微服务架构又会为
Session
管理带来哪些改变...
请
高手
们
帮忙
看一下为什么我这个asp的搜索功能搜索不了?
请
帮忙
修改一下为谢!
If
session
("Admin")<>"" then Response.Write" href='kymod.asp?id="&Rs("id")&"' style='color:red'>修改</a>" Response.Write" href='del.asp?id="&Rs("id")&"' ...
Hibernate查询错误!
请
高手
帮忙
解决!
源代码: public List findByBianhao(String bianhao) { Transaction tx = null;... try {
session
= hib.open
Session
(); tx = (Transaction)
session
.beginTransaction(); Query query = se
oracle enq: tm,关于enq: TM - contention(
请
高手
帮忙
解释)
棉花说的是对的,level 3的TM ...如:
session
1:SQL> lock table hao in row exclusive mode;Table(s) Locked.
session
2:SQL> update hao set object_name='hao' where object_id=111;1 row updated.SQL>...
防火墙技术的设计,调试中出现错误错误,“ADD_ACL_QUERY”: 此符号中不允许有默认参数,
请
高手
帮忙
!!!
SESSION
*
session
; int i
session
; TCHAR sPathName[MAX_PATH]; } XFILTER_IO_CONTROL, *PXFILTER_IO_CONTROL; typedef int (WINAPI * XF_IO_CONTROL)(int iControlType, XFILTER_IO_CONTROL* ioControl...
Web 开发
81,091
社区成员
341,718
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章