声明:此篇文章为从网上下载的doc文档中的摘取,彩色部分为本人的笔记。
usession对象
HTTP协议是一种无状态的协议,客户向服务器发出请求,然后服务器返回响应(客户请求的页送至浏览器),连接就被关闭了,当下一次连接时,已经没有以前连接的信息了,无法判定本次连接和之前的连接是否来自于同一个客户。因此,为了保存来自同一客户的信息,可以使用session(会话)对象。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
从打开浏览器请求服务器上的某个服务目录(一个Web应用程序的目录),到关闭浏览器离开服务器,称作一个 —— 会话(Session)。与此同时打开另外一个浏览器来发送请求,这将是另外一个会话(Session)。
客户可能会访问该服务目录中的多个页面,服务器通过客户的 session 对象就可以知道这是否是同一个客户,如果是,那么客户登陆一次就可以访问其它页面,而不必每个页面都登陆了。这些页面必须是同一客户窗口的(即各个页面是通过链接跳转的),如果是另外打开一个客户窗口必须重新登陆。
session的常用方法:
获取session ID |
String getId() |
sessionid.jsp
tom.jsp
jerry.jsp |
判断是否是新的session |
boolean isNew() |
sessionnew.jsp |
设置属性值 |
setAttribute(Stirng name,Object value) |
login.jsp
welcom.jsp |
获取属性值 |
Object getAttribute(String name) | |
删除属性值 |
removeAttribute(String name) |
|
销毁session对象 |
invalidate() |
logout.jsp |
session的创建时间 |
long getCreationTime() |
sessiontime.jsp |
最后一次操作时间 |
long getLastAccessedTime() |
session对象的ID
当首次请求服务器上的JSP页面时,服务器会生成一个session对象,具有一个服务器上唯一的ID号:session ID ,同时这个ID号会被发送到客户端,存放到客户的cookie中(前述例子cookie中的JSESSIONID即是)。
直到浏览器关闭,或是session对象达到了最大生存时间(一般30分钟),则该session对象失效。
例如:从sessionid.jsp出发,依此访问同一个站点的其它几个页面(tom.jsp,jerry.jsp),可以发现sessionID是一致的。
获取sessionID的方法,String session.getId(),得到的是1个32位的字符串。



















session属性设置:
举例:假设用户输入的帐户信息为 admin/1234,则表示登陆成功,可以浏览welcome.jsp页面,否则不能浏览,需要再登陆。
2个页面:
login.jsp :表单,验证登陆
welcome.jsp:欢迎页,用户先登陆成功之后才可访问。
【分析】:
可以利用session传递一个标识属性(flag)来判定用户是否成功登陆了:
² 如果登陆验证成功,则使用:
session.setAttribute(“flag”,”OK”) 设置标识属性flag
² 在welcome.jsp页面,根据属性flag是否有值,即可知道之前是否登陆过了:
if( session.getAttribute(“flag”)!=null ) 则可以访问welcome页面,否则转回登陆页面。






















































【注】不要去判断 flag的值是否为”OK”,如果没有通过登陆验证的话,根本不会有flag属性值传到welcome页面,session.getAttribute("flag")的结果会是null,无法进行字符串的比对。
注销:让用户的session失效
若希望在session生存时间到达之前释放session的资源,则可以手动销毁session对象,采用方法:invalidate() 。






session的时间相关:
创建session的时间:客户浏览器第一次访问服务目录上的页的时间
最后一次操作的时间:最近一次访问服务目录上的页的时间
【返回的时间是个自1970年1月1日以来的毫秒数,long型,需要用new Date(long time) 构造成为日期形式的时间】
大约计算客户的在线时间:getLastAccessedTime() - getCreationTime()


















备注:
问题:session的创建过程?sessionId在服务器和客户端都保存吗?
解答:当首次请求服务器上的JSP页面时,服务器会生成一个session对象,具有一个服务器上唯一的ID号:session ID ,同时这个ID号会被发送到客户端,存放到客户的cookie中。
Session是服务器端创建的,cookie是客户端创建的。
Session两种实现:
1、cookie
2、URL重写
如果浏览器支持cookie,创建session的时候会把创建的sessionId保存在cookie中。如果不支持cookie,必须自己编程使用URL重写的方式实现Session:
response.encodeURL()
² 转码
² URL后面加入sessionID
转载于:https://blog.51cto.com/java999/163806